时间和日期新API(JSR310)

对日期和时间的新的API,主要包括 Instant、Clock、LocalDateTime、DateTimeFormatter、ZonedDateTime 以及替换 Calendar 的 Chronology 等类、建议大家体验使用。

具体看下面的代码和注释吧:

import org.junit.Test;

import java.time.*;
import java.time.chrono.ChronoLocalDateTime;
import java.time.chrono.Chronology;
import java.time.chrono.HijrahChronology;
import java.time.format.DateTimeFormatter;
import java.time.temporal.IsoFields;

public class TimeTest {

    @Test
    public void testInstant() {
        //瞬时时间 相当于以前的System.currentTimeMillis()
        Instant instant1 = Instant.now();
        System.out.println(instant1.getEpochSecond());//精确到秒 得到相对于1970-01-01 00:00:00 UTC的一个时间
        System.out.println(instant1.toEpochMilli()); //精确到毫秒

        Clock clock1 = Clock.systemUTC(); //获取系统UTC默认时钟
        Instant instant2 = Instant.now(clock1);//得到时钟的瞬时时间
        System.out.println(instant2.toEpochMilli());

        Clock clock2 = Clock.fixed(instant1, ZoneId.systemDefault()); //固定瞬时时间时钟
        Instant instant3 = Instant.now(clock2);//得到时钟的瞬时时间
        System.out.println(instant3.toEpochMilli());//equals instant1
    }

    @Test
    public void testClock() throws InterruptedException {
        //时钟提供给我们用于访问某个特定 时区的 瞬时时间、日期 和 时间的。
        Clock c1 = Clock.systemUTC(); //系统默认UTC时钟(当前瞬时时间 System.currentTimeMillis())
        System.out.println(c1.millis()); //每次调用将返回当前瞬时时间(UTC)

        Clock c2 = Clock.systemDefaultZone(); //系统默认时区时钟(当前瞬时时间)

        Clock c31 = Clock.system(ZoneId.of("Europe/Paris")); //巴黎时区
        System.out.println(c31.millis()); //每次调用将返回当前瞬时时间(UTC)

        Clock c32 = Clock.system(ZoneId.of("Asia/Shanghai"));//上海时区
        System.out.println(c32.millis());//每次调用将返回当前瞬时时间(UTC)

        Clock c4 = Clock.fixed(Instant.now(), ZoneId.of("Asia/Shanghai"));//固定上海时区时钟
        System.out.println(c4.millis());
        Thread.sleep(1000);
        System.out.println(c4.millis()); //不变 即时钟时钟在那一个点不动

        Clock c5 = Clock.offset(c1, Duration.ofSeconds(2)); //相对于系统默认时钟两秒的时钟
        System.out.println(c1.millis());
        System.out.println(c5.millis());

    }

    @Test
    public void testLocalDateTime_LocalDate_LocalTime() {
        //使用默认时区时钟瞬时时间创建 Clock.systemDefaultZone() -->即相对于 ZoneId.systemDefault()默认时区
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);

        //自定义时区
        LocalDateTime now2 = LocalDateTime.now(ZoneId.of("Europe/Paris"));
        System.out.println(now2);//会以相应的时区显示日期

        //自定义时钟
        Clock clock = Clock.system(ZoneId.of("Asia/Dhaka"));
        LocalDateTime now3 = LocalDateTime.now(clock);
        System.out.println(now3);//会以相应的时区显示日期

        //不需要写什么相对时间 如java.util.Date 年是相对于1900 月是从0开始
        //2013-12-31 23:59
        LocalDateTime d1 = LocalDateTime.of(2013, 12, 31, 23, 59);

        //年月日 时分秒 纳秒
        LocalDateTime d2 = LocalDateTime.of(2013, 12, 31, 23, 59, 59, 11);

        //使用瞬时时间 + 时区
        Instant instant = Instant.now();
        LocalDateTime d3 = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault());
        System.out.println(d3);

        //解析String--->LocalDateTime
        LocalDateTime d4 = LocalDateTime.parse("2013-12-31T23:59");
        System.out.println(d4);

        LocalDateTime d5 = LocalDateTime.parse("2013-12-31T23:59:59.999");//999毫秒 等价于999000000纳秒
        System.out.println(d5);

        //使用DateTimeFormatter API 解析 和 格式化
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        LocalDateTime d6 = LocalDateTime.parse("2013/12/31 23:59:59", formatter);
        System.out.println(formatter.format(d6));

        //时间获取
        System.out.println(d6.getYear());
        System.out.println(d6.getMonth());
        System.out.println(d6.getDayOfYear());
        System.out.println(d6.getDayOfMonth());
        System.out.println(d6.getDayOfWeek());
        System.out.println(d6.getHour());
        System.out.println(d6.getMinute());
        System.out.println(d6.getSecond());
        System.out.println(d6.getNano());
        //时间增减
        LocalDateTime d7 = d6.minusDays(1);
        LocalDateTime d8 = d7.plus(1, IsoFields.QUARTER_YEARS);

        //LocalDate 即年月日 无时分秒
        //LocalTime即时分秒 无年月日
        //API和LocalDateTime类似就不演示了
    }

    @Test
    public void testZonedDateTime() {
        //即带有时区的date-time 存储纳秒、时区和时差(避免与本地date-time歧义)。
        //API和LocalDateTime类似,只是多了时差(如2013-12-20T10:35:50.711+08:00[Asia/Shanghai])
        ZonedDateTime now = ZonedDateTime.now();
        System.out.println(now);

        ZonedDateTime now2 = ZonedDateTime.now(ZoneId.of("Europe/Paris"));
        System.out.println(now2);

        //其他的用法也是类似的 就不介绍了

        ZonedDateTime z1 = ZonedDateTime.parse("2013-12-31T23:59:59Z[Europe/Paris]");
        System.out.println(z1);

    }

    @Test
    public void testDuration() {

        //表示两个瞬时时间的时间段
        Duration d1 = Duration.between(Instant.ofEpochMilli(System.currentTimeMillis() - 12323123), Instant.now());
        //得到相应的时差
        System.out.println(d1.toDays());
        System.out.println(d1.toHours());
        System.out.println(d1.toMinutes());
        System.out.println(d1.toMillis());
        System.out.println(d1.toNanos());

        //1天时差 类似的还有如ofHours()
        Duration d2 = Duration.ofDays(1);
        System.out.println(d2.toDays());
    }

    @Test
    public void test() {
        //提供对java.util.Calendar的替换,提供对年历系统的支持
        Chronology c = HijrahChronology.INSTANCE;
        ChronoLocalDateTime d = c.localDateTime(LocalDateTime.now());
        System.out.println(d);
    }

    @Test
    public void testOthers() {
        Year year = Year.now();
        YearMonth yearMonth = YearMonth.now();
        MonthDay monthDay = MonthDay.now();

        System.out.println(year);//年
        System.out.println(yearMonth); //年-月
        System.out.println(monthDay); // 月-日

        //周期,如表示10天前  3年5个月钱
        Period period1 = Period.ofDays(10);
        System.out.println(period1);
        Period period2 = Period.of(3, 5, 0);
        System.out.println(period2);

    }

}
时间: 2024-09-21 12:55:02

时间和日期新API(JSR310)的相关文章

C#如何获取时间(日期+具体时间)各种方法

问题描述 我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-0412:11:10)等.//获取日期+时间DateTime.Now.ToString();//2008-9-420:02:10DateTime.Now.ToLocalTime().ToString();//2008-9-420:12:12//获取日期DateTime.Now.ToLongDateS

Java编程那些事儿78——时间和日期处理

9.6 java.util包 java.util包是Java语言提供的工具类包,该包中包含了如日期.随机数和数据结构实现类等一系列的工具类实现,是学习Java语言的基础包之一. 本部分就以Java语言中常用的时间和日期处理.随机数处理以及集合框架为基础进行介绍. 9.6.1 时间和日期处理 使用程序进行时间和日期处理,是程序员必须的一种常用技能,在不同的程序设计语言中提供了不同的格式进行实现,现在就介绍一下Java语言中的实现方式,以及基本的应用,使得对于Java语言的时间和日期处理技术有比较全

Windows 7时间和日期的设置

  在WIN7中,时间和日期设置窗口有了质的变化,它并没有继承以前的WINXP系统样式,而是改进使其有了更为典雅的界面.下面我们来看下如何对时间和日期进行设置. 1.将鼠标移动至时间显示上(任务栏右侧)然后单击,此时可以看到时间和日期设置窗口. 提示:如果将鼠标移动至时间上稍微停留片刻,可以看到一个小的时间提示标签. 2. 单击步骤一种的"更改日期和时间设置..."文字,将出现具体的设置对话框. 3.在"日期和时间"窗口中单击"更改日期和时间"设

Python标准库02 时间与日期 (time, datetime包)

原文:Python标准库02 时间与日期 (time, datetime包) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   Python具有良好的时间和日期管理功能.实际上,计算机只会维护一个挂钟时间(wall clock time),这个时间是从某个固定时间起点到现在的时间间隔.时间起点的选择与计算机相关,但一台计算机的话,这一时间起点是固定的.其它的日期信息都是从这一时间计算得到的.此外,计算机还可以测量CPU实际上

《Android应用开发攻略》——2.12 为显示格式化时间和日期

2.12 为显示格式化时间和日期 Pratik Rupwal2.12.1 问题 你希望以不同的标准格式显示时间和日期.2.12.2 解决方案 DateFormat类提供API,用于以自定义格式表示时间和日期.这些API用起来毫不费力.2.12.3 讨论 例2-15添加了5个不同的TextView控件,用于显示不同格式的时间和日期. 例2-15:TextView布局 <?xml version="1.0" encoding="utf-8"?> <Li

C语言中对时间和日期的处理

本文详细介绍C语言中对时间和日期的处理 Chuck Allison 是盐湖城圣 Latter Day 教堂总部下耶稣教堂家族历史研究处的软件体系设计师.他拥有数学学士和数学硕士学位.他从1975年起开始编程,从1984年起他开始从事c语言的教学和开发.他目前的兴趣是面向对象的技术及其教育.他是X3J16,ANSI C ++标准化委员会的一员.发送e-mail到 allison@decus.org,或者拨打电话到 (801)240-4510 均可以与他取得联系. 大部分的操作系统有办法得到当前的日

win8系统下时间和日期自动同步怎么设置

  win8系统下时间和日期自动同步怎么设置         方法一: 1.登陆windows 8桌面,左键单击任务栏右下角的显示时间,选择更改日期和时间设置. 2.进入日期和时间窗口,选择Internet时间-更改设置-勾选:与Internet时间服务器同步(默认服务器地址:time.windows.com)-立即更新-确定,系统将自动同步系统时间. 方法二: 1.可以进入Win 8系统桌面后运行Windows+X(或鼠标移动到左下角点击右键),左键单击控制面板. 2.进入控制面板后选择:时钟

word2010怎么插入时间和日期

  word2010插入时间和日期教程: 打开Word2010文档,将光标移动到合适的位置. 单击"插入"选项卡. 在"文本"区单击"日期和时间"按钮. 在"日期和时间"对话框的"可用格式"列表中选择合适的日期或时间格式. 选中"自动更新"选项,实现每次打开Word文档自动更新日期和时间,单击"确定"按钮即可.

Word2010中添加时间和日期的技巧

  在Word中编辑文档时,有时由于内容的需要,要在里面插入时间和日期,并且这个时间和日期是会自动更新的.今天,小编就来向大家介绍介绍在Word2010中插入时间和日期的技巧. Word2010 步骤/方法 打开Word2010文档,将光标移动到合适的位置. 单击"插入"选项卡. 在"文本"区单击"日期和时间"按钮. 在"日期和时间"对话框的"可用格式"列表中选择合适的日期或时间格式. 选中"自动