LocalDataTime日期类的基本使用,toEpochSecond 在不同时区返回相同的值 以下几行返回相同的值

1、获取当前日期:

精确到天: LocalDate now = LocalDate.now();

精确到秒:LocalDateTime now = LocalDateTime.now();

2、日期转指定格式字符串:

LocalDate now = LocalDate.now();

// 定义格式

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(“yyyy”);

// 日期格式化为字符串

String timeStr = dtf.format(now);

3、字符串转指定格式的日期:

// 定义格式

DateTimeFormatter pattern = DateTimeFormatter.ofPattern(“yyyy.MM.dd”);

// 字符串解析成LocalDate日期

LocalDate parse = LocalDate.parse(“2020.12.12”, pattern);

将yyyy.MM.dd转为了yyyy-MM-dd(LocalDate格式)

4、日期转时间戳:

// 获得当前时间

LocalDateTime localDateTime = LocalDateTime.now();

// 将当前时间转为秒级时间戳

long second = localDateTime.toEpochSecond(ZoneOffset.ofHours(8));

5、时间戳转日期:

// 获取秒级时间戳

long second = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8));

// 将时间戳转为当前时间

LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(second, 0,ZoneOffset.ofHours(8));

 

 

Java 8 – toEpochSecond 在不同时区返回相同的值 以下几行返回相同的值,即使它们位于不同的时区

System.out.println(Instant.now().atZone(ZoneId.of("GMT+04")).toEpochSecond());
System.out.println(Instant.now().atZone(ZoneId.of("GMT+02")).toEpochSecond());

我是做错了什么还是我只是误解了它的工作原理?

根据 javadoc , toEpochSecond() 给出自 1970-01-01 00:00:00 UTC 以来的秒数,符合 definition of epoch .

这就是预期的结果:两个即时值相同。转换为分区值后,它们仍然表示同一时间点,而不管时区如何。因此,转换为自纪元以来的秒数,您将获得相同的值。

如果我一步步尝试:

// Now:
2017-05-27T23:46:00.324Z
// Now GMT+04:
2017-05-28T03:46:00.324+04:00[GMT+04:00]
// Now GMT+02:
2017-05-28T01:46:00.324+02:00[GMT+02:00]
// Both values represent the same point in time, i.e. that many seconds since epoch (which is defined UTC):
1495928760

我希望这将有助于阐明要点,而不是带来更多的困惑:这样做的另一个结果(将纪元定义为基于 UTC 的纪元)是,如果您在在智利、乌干达或蒙古的同一时刻,您将获得相同的值(前提是系统时钟正确同步)。

 

获取时间相差8小时问题:

java获取时间相差8小时的问题及解决方式

 

java时间格式转换

扫码领红包

微信赞赏支付宝扫码领红包

发表回复

后才能评论