上海1927时改java问题的解决办法 [英] Solution to Shanghai 1927 time change java issue
问题描述
系统时间应设置为香港(UTC+08:00)
System Time should be set Hong Kong (UTC+08:00)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class HKtimeZone {
public static void main(String [] args ) throws ParseException{
String dateString = "1900-01-01 08:00:00.000";
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date endDate = df.parse(dateString);
System.out.println(endDate);
}
}
上面的代码打印:
1900 年 1 月 1 日星期一 08:05:43 CST
Mon Jan 01 08:05:43 CST 1900
代替
1900 年 1 月 1 日星期一 08:00:00 CST.
Mon Jan 01 08:00:00 CST 1900.
我知道它的原因/历史,但我想知道在 Java 中是否有任何已知的解决方案.我在我的项目中遇到了这次特定的问题,所以我问它不是为了好玩或测试某人的知识.
I know the reason/history of it but I want to know is there any know solution to it in Java. I have problem in my project specific to this time so I am not asking it just for fun or testing someone knowledge.
注意:将时区设置为 UTC/GMT 会使情况更糟.
Note : Setting timezone to UTC/GMT make situation more worse.
推荐答案
根据我的 Java 8,历史上当时上海是 UTC+08:05:43,而香港是 UTC+07:36:42.我不确定您的确切问题是什么,但我认为以下解决方案之一应该有效:
According to my Java 8, Shanghai was at UTC+08:05:43 at that time in history, while Hong Kong was at UTC+07:36:42. I am not sure what your exact problem is, but I think one of these solutions should work:
- 为您使用时间所做的一切指定一个明确的时区.
- 使用
LocalDateTime
.这是一个没有任何时区规范的日期和时间,因此这将确保 8:00 保持在 8:00.
- Give an explicit time zone to everything you do with times.
- Use
LocalDateTime
. This is a date and time without any time zone specification, so this will make sure that 8:00 stays 8:00.
演示代码:
String dateString = "1900-01-01 08:00:00.000";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
LocalDateTime dateTime = LocalDateTime.parse(dateString, dtf);
System.out.println(dateTime);
ZonedDateTime shanghaiDateTime = dateTime.atZone(ZoneId.of("Asia/Shanghai"));
System.out.println(shanghaiDateTime);
ZonedDateTime hongKongDateTime = dateTime.atZone(ZoneId.of("Asia/Hong_Kong"));
System.out.println(hongKongDateTime);
OffsetDateTime utcPlus8DateTime = dateTime.atOffset(ZoneOffset.ofHours(8));
System.out.println(utcPlus8DateTime);
输出:
1900-01-01T08:00
1900-01-01T08:00+08:05:43[Asia/Shanghai]
1900-01-01T08:00+07:36:42[Asia/Hong_Kong]
1900-01-01T08:00+08:00
这篇关于上海1927时改java问题的解决办法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!