Java8 时间日期

LocalDate LocalTime LocalDateTime

日期时间

// 创建
LocalDateTime ldt1 = LocalDateTime.now();
LocalDateTime ldt2 = LocalDateTime.of(1997, 3, 26, 11, 11, 11);
LocalDateTime ldt3 = LocalDateTime.now(ZoneId.of("Europe/Tallinn")); // 指定时区
System.out.println(ldt1);
System.out.println(ldt2);
System.out.println(ldt3);

// 运算 plusXXX minusXXX getXXX
LocalDateTime ldt4 = ldt1.plusYears(2);
LocalDateTime ldt5 = ldt1.minusMonths(2);
System.out.println(ldt5); // 2020-12-02T09:40:01.537
System.out.println(ldt5); // 2018-10-02T09:40:01.537
System.out.println(ldt5.getMonth()); // DECEMBER
System.out.println(ldt5.getMonthValue()); // 12
System.out.println(ldt5.getDayOfWeek());  // WEDNESDAY
System.out.println(ldt5.getDayOfMonth()); // 2
System.out.println(ldt5.getDayOfYear());  // 337

Instant

时间戳

// 创建
Instant ins1 = Instant.now(); // 默认获取UTC时区
System.out.println(ins1); // 2018-12-02T01:46:57.064Z
Instant ins2 = Instant.ofEpochSecond(60);
System.out.println(ins2); // 1970-01-01T00:01:00Z

// 改时区
OffsetDateTime odt = ins1.atOffset(ZoneOffset.ofHours(8));
System.out.println(odt); // 2018-12-02T09:46:57.064+08:00

// 时间戳
System.out.println(ins1.toEpochMilli()); // 1543715337658

Duration Period

Duration:计算两个时间之间的间隔。

Instant ins1 = Instant.now();
Thread.sleep(1000);
Instant ins2 = Instant.now();
Duration duration = Duration.between(ins1, ins2);
System.out.println(duration.toMillis());

// --------------------------------------------

LocalTime ldt1 = LocalTime.now();
Thread.sleep(1000);
LocalTime ldt2 = LocalTime.now();
System.out.println(Duration.between(ldt1, ldt2).toMillis());

Period:计算两个日期之间的间隔。

LocalDate ld1 = LocalDate.of(2015, 1, 1);
LocalDate ld2 = LocalDate.now();
Period period = Period.between(ld1, ld2);
System.out.println(period); // P3Y11M1D
System.out.println(period.getYears()); // 3

TemporalAdjuster

时间校正器

LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt); // 2018-12-02T10:08:57.684

// 当月的第十天
// 这样的写法语义有限,使用TemporalAdjuster
LocalDateTime ld2 = ldt.withDayOfMonth(10);
System.out.println(ld2); // 2018-12-10T10:08:57.684

// 下一个周日
LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
System.out.println(ldt3); // 2018-12-09T10:12:25.633

// 下一个工作日
LocalDateTime ldt5 = ldt.with((l) -> {
    LocalDateTime ldt4 = (LocalDateTime) l;
    DayOfWeek dow = ldt4.getDayOfWeek();
    if (dow.equals(DayOfWeek.FRIDAY)) {
        return ldt4.plusDays(3);
    } else if (dow.equals(DayOfWeek.SATURDAY)) {
        return ldt4.plusDays(2);
    } else {
        return ldt4.plusDays(1);
    }
});
System.out.println(ldt5); // 2018-12-03T10:21:04.932

DateTimeFormatter

格式化

// 使用 LocalDateTime.format方法
LocalDateTime ldt = LocalDateTime.now();
// 2018-12-02T10:24:08.098
System.out.println(ldt.format(DateTimeFormatter.ISO_DATE_TIME));
// 2018-12-02
System.out.println(ldt.format(DateTimeFormatter.ISO_DATE));
// 2018年12月02日 10:26:02
System.out.println(ldt.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss")));

// 使用 DateTimeFormatter.format
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
System.out.println(dtf.format(LocalDateTime.now()));

// parse
LocalDateTime newDate = ldt.parse("2018年12月02日 10:32:55", dtf);
System.out.println(newDate);

ZonedDate、ZonedTime、ZonedDateTime

Set<String> set = ZoneId.getAvailableZoneIds();
set.forEach(System.out::println);

// -----------------------------------

LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt = ldt.atZone(ZoneId.of("Europe/Tallinn"));
System.out.println(zdt); // 2018-12-02T10:44:22.142+02:00[Europe/Tallinn]


LocalDateTime ldt2 = LocalDateTime.now(ZoneId.of("Europe/Tallinn"));
ZonedDateTime zdt2 = ldt2.atZone(ZoneId.of("Europe/Tallinn"));
System.out.println(zdt2); // 2018-12-02T04:44:22.146+02:00[Europe/Tallinn]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容