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小时问题:
赞赏
微信赞赏
支付宝赞赏