【发布时间】:2019-11-02 13:45:13
【问题描述】:
像this 这样的服务有一个明确的说明
所有时间均以当地标准时间 (LST) 指定。增加 1 小时 调整观察时间和地点的夏令时。
给定一个LocalDateTime 对象ldt,创建一个瞬间就像
Instant.of(ldt,zoneId)。但是,如果我提供ZoneId,那么Instant 将假定已经进行了夏令时(DST)调整,而ldt 是针对DST,但事实并非如此。
使Instant 的构造函数应用“标准”偏移而不考虑夏令时的最Java 风格的方法是什么?
编辑:我的意思是,对于给定的年份,没有硬编码检查 DST 转换的确切日期?当然,我可以得到偏移量
ZoneOffset offset= ZoneOffset.of(zoneId) 然后从给定的时间戳中减去 offset.getTotalSeconds(),移动到“参考”时间。但仍将参考调整后的时间戳提供给Instant
有同样的夏令时问题。
编辑:正如下面所建议的,我尝试了这个:
String str = String.format("%04d-%02d-%02dT%s:00", year, month, day, hourMinutes);
LocalDateTime ldt = LocalDateTime.parse(str);
Instant i1= ldt.toInstant(zoneId.getRules().getOffset(ldt));
Instant key= ldt.toInstant(zoneId.getRules().getStandardOffset(i1));
【问题讨论】:
-
嗨,也许用
ZoneId.getRules()?