- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个桌面应用程序(必须在 Windows 中运行),它需要在执行特定操作时记录时间戳,但是我在调用日历时得到的时间带有错误的时间和正确的时区。
运行一些测试,我发现如果我取消选中 Windows 时区设置上的“自动调整夏令时时钟”复选框,日历会提供正确的时间。 Linux 上不存在此问题。不幸的是,我不允许在 Windows 机器上进行任何更改。
更多信息:
public class Test2 {
public static void main(String[] args) {
SimpleDateFormat sdfBase = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
long milisBase = Calendar.getInstance().getTimeInMillis();
Calendar calenBase = Calendar.getInstance();
Date fechaBase = calenBase.getTime();
String fechaStringBase = sdfBase.format(fechaBase);
TimeZone tzBase = Calendar.getInstance().getTimeZone();
System.out.println("Time (in mill): " + milisBase);
System.out.println("TimeZone: " + tzBase.getDisplayName() + " - " + tzBase.getID() + " -Offset: " + tzBase.getRawOffset());
System.out.println("Date Calendar: " + fechaBase);
System.out.println("Fecha StringBase: " + fechaStringBase);
}
}
Time (in mill): 1464645007120
TimeZone: Chile Time - America/Santiago -Offset: -10800000
Date Calendar: Mon May 30 18:50:07 CLT 2016
Fecha StringBase: 30-05-2016 18:50:07
Time (in mill): 1464645037914
TimeZone: GMT-04:00 - GMT-04:00 -Offset: -14400000
Date Calendar: Mon May 30 17:50:37 GMT-04:00 2016
Fecha StringBase: 30-05-2016 17:50:37
最佳答案
概括
智利当局在最后一刻更改了今年(2016 年)的时区规则。 tz
Java中的数据库尚未更新。
详情如下。
java.time
您正在使用与早期 Java 捆绑在一起的旧日期时间类,这些类已被证明很麻烦。在 Java 8 及更高版本中,这些类被 java.time 框架(受 Joda-Time 库的启发)取代。避免旧类(class)。
关注UTC
程序员应该首先考虑 UTC .总是 verify the current time in UTC以确保计算机甚至有正确的时间。翻转时区和Daylight Saving Time (DST)变化会让你的大脑受伤,而UTC就是你的阿司匹林。
在 Java 8 及更高版本中, Instant
类表示 UTC 时间线上的时刻,分辨率以纳秒为单位。
Instant now = Instant.now();
System.out.println( "Instant.now(): " + now );
TimeZone.setDefault
来更改 JVM 当前的默认时区。 .
-03:00
永久停留在 DST。并决定永远不再回到
-04:00
的标准时间.然后他们又改变了主意,
announcing in March 2016他们将重新引入冬季的标准时间(南半球,现在是冬季,五月下旬,六月,七月)。在 2016 年 5 月 15 日午夜(几周前),
-04:00
的旧标准偏移量开始了。那个标准/冬季时间将持续到 2016 年 8 月 14 日(或者直到他们再次改变主意)。 [带着一粒盐把这一切都拿走。请确认我得到的事实是正确的。]
tz
time zone database 的计算机造成严重破坏。更新文件以反射(reflect)最新的摆弄。
tz
的 Java 副本是否已是最新。
long millis = 1464645007120L;
Instant instant = Instant.ofEpochMilli ( millis ); // UTC, always.
ZoneId zoneId = ZoneId.of ( "America/Santiago" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
System.out.println ( "millis: " + millis + " | instant: " + instant + " | zoneId: " + zoneId + " | zdt: " + zdt );
millis: 1464645007120 | instant: 2016-05-30T21:50:07.120Z | zoneId: America/Santiago | zdt: 2016-05-30T18:50:07.120-03:00[America/Santiago]
-03:00
.所以在我看来
current version of Java released mid-April不幸的是,它与 3 月份宣布的智利变化不同步。
America/Santiago
的正确偏移量应该是
-04:00
如此处所示
time.is/Santiago .
tzupdater
tool .但是
current download标有
2015
字样所以我认为它也不是最新的。
tz
的更正版本。数据库(虽然也许你可以破解你自己的更新——我不知道)。在此之前,作为一种解决方法,也许您可以使用
ZoneOffset
在 Java 代码中指定自己的偏移量。类,
ZoneId
的子类仅表示与 UTC 的偏移量,没有任何调整异常(例如 DST)的规则。我还没有考虑过其中的含义。警惕。
ZoneOffset zoneOffset = ZoneOffset.of( -4 ); // Negative four hours for '-04:00'.
关于Java 日历在 MS Windows 中为 `America/Santiago` 区域返回错误的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37533796/
System.setProperty("user.timezone", "America/Chicago"); TimeZone.setDefault(TimeZone.getTimeZone("美国
尝试解析带有详细时区的日期: var sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); sdf.parse("2022-09-02 02:30:
我的应用在尝试解析美国/芝加哥时区的日期时遇到问题。我已经回顾了一堆其他的 ParseException 问题,并且我认为我已经了解了 Java 中日期解析的所有常见陷阱。以下代码适用于我遇到的所有其
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Weird timezone issue with pytz 这似乎是错误的: >>> import pyt
这个问题已经有答案了: How to add timezone into a naive datetime instance in python [duplicate] (2 个回答) 已关闭 8 年
我在使用 moment-timezone 和 America/Sao_Paulo 尝试解析具有 America/Sao_Paulo 偏移量的日期时遇到错误。我创建了这段代码: const date =
我有一个从我的服务器发送的以毫秒为单位的时间戳 ( Unix time / time from Epoch ),它使用 Joda-time 并且始终使用恒定时区“America/New_York”。在
如何通过此类查询 MySQL 并在每次查询后设置 time_zone?我对于在以下代码块中放置时区命令的位置遇到一些麻烦: class MyDB { private $connection;
我想在 Java 中解析以下字符串并将其转换为日期: DTSTART;TZID=America/Los_Angeles:20140423T120000 我试过这个: SimpleDateFormat
谁能告诉我,以下两种说法有什么区别: TimeZone.getTimeZone("America/New_York") 和 TimeZone.getTimeZone("EST") 换句话说,为什么 E
我有这段代码在 SQL 中运行良好。但是我想使用不同的时区格式,例如 'America/New_York' 而不是 'US Eastern Standard Time' SELECT TODATETI
我的日历对象有问题,它没有显示美国/圣地亚哥时区 DST(每日节省时间)的正确偏移量:我的示例代码: TimeZone fromTimeZone = TimeZone.getTimeZone("美国/
有没有办法使用 moment.js 或 moment-timezone 设置时区始终反射(reflect)“美国/纽约”,无论用户从何处访问应用程序? 我已经尝试过此操作,但对象的时区反射(refle
我在尝试获取位置“America/Punta_Arenas”的时区时遇到异常。我正在使用 joda LocalDateTime。 import org.joda.time.{DateTime, Dat
这是我的代码 package main import ( "fmt" "time" ) func main() { tz := "America/New_York" loc, err
我编写了一个函数,以 HH:MM A 格式返回 PST/PDT 中的当前时间(例如上午 12:04) function getTimeStr() { var currentTime = momen
代码: console.log(start) 读取,2018 年 3 月 1 日星期四 00:00:00 GMT+0530(印度标准时间) 我想要一个新对象 start_NY ,它将读取 Thu Ma
我有一个桌面应用程序(必须在 Windows 中运行),它需要在执行特定操作时记录时间戳,但是我在调用日历时得到的时间带有错误的时间和正确的时区。 运行一些测试,我发现如果我取消选中 Window
我从我的 vendor 那里得到一个时间戳,它是美国中部时间但没有夏令时。我需要使用 DST(如果适用)将其转换为 America/New_York。 我尝试只使用常规 JavaScript,然后转向
从服务器收到的日期是 UTC 时区,我需要将其转换为特定时区,例如:America/New_York。以下是相同的代码 但是在这样做时我得到了以下错误: Moment Timezone has
我是一名优秀的程序员,十分优秀!