上海1927时改java问题的解决办法 [英] Solution to Shanghai 1927 time change java issue

查看:58
本文介绍了上海1927时改java问题的解决办法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

系统时间应设置为香港(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:

  1. 为您使用时间所做的一切指定一个明确的时区.
  2. 使用LocalDateTime.这是一个没有任何时区规范的日期和时间,因此这将确保 8:00 保持在 8:00.
  1. Give an explicit time zone to everything you do with times.
  2. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆