java 当天唯一ids_java-为不同的时间字符串接收相同的ZonedDat...

当您调用LocalDate.parse时,您只获得日期部分(日,月和年),而丢弃其余部分. LocalDate没有时间字段(小时,分钟,秒和秒的一部分),因此它们只是被丢弃并丢失.

然后,调用atStartOfDay(ZoneId.systemDefault()),它将时间设置为JVM默认时区的午夜.

如果要保留所有内容(日期和时间),请将其解析为LocalDateTime,这是一个包含所有日期和时间字段的类.然后,调用atZone方法将其转换为ZonedDateTime:

String inputTime = "20171025-10:58:24.062151";

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd-HH:mm:ss.SSSSSS");

// parse to a LocalDateTime (keeping all date and time fields)

LocalDateTime date = LocalDateTime.parse(inputTime, formatter);

// convert to ZonedDateTime

ZonedDateTime z = date.atZone(ZoneId.systemDefault());

PS:ZoneId.systemDefault()返回JVM默认时区,但请记住此值为can be changed without notice, even at runtime,因此最好始终使您使用的是明确的.

API使用IANA timezones names(始终以地区/城市格式,例如亚洲/科伦坡或欧洲/柏林).

避免使用3字母缩写(例如IST或CET),因为它们是ambiguous and not standard.

您可以通过调用ZoneId.getAvailableZoneIds()获得可用时区的列表(并选择最适合您的系统的时区).然后,使用区域名称调用ZoneId.of()方法,如下所示:

// using specific timezone instead of JVM's default

ZonedDateTime z = date.atZone(ZoneId.of("Asia/Colombo"));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值