【问题标题】:Java: Date and offset issue?Java:日期和偏移量问题?
【发布时间】:2012-03-29 12:11:10
【问题描述】:

我有一个 Web 应用程序,如果客户端(在英国处于 UTC+0000 时区)我将日期参数作为字符串发送,如下所示:

date = "2012-03-28 10:00:00 +0000" // this is meant to say "This is the date and time BST which is +0000 offset from UTC"

但是当我在我的 Java REST 服务中收到此字符串并尝试使用 SimpleDateFormater 将其解析为日期对象时,它假定我说的是:“这是 10:00 点 UTC,我位于 UTC +0000 时区”,因此它将其存储为 UTC 时间上午 10:00 而不是 UTC 时间上午 09:00,这是从 BST 上午 10:00 开始的正确对话(即 +0000)。

这是我的示例 java 代码:

String dateString = "2012-03-28 10:00:00 +0000";
Timestamp timestamp= null;
try{
DateFormat planningDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
Date date = planningDateFormat.parse(dateString);
timestamp = new Timestamp(date.getTime());
System.out.println("Time stamp value is: " + timestamp.getTime());
System.out.println("Date value after parse: " + date);
System.out.println("Time value passed in was: " + dateString);
}
catch(Exception e){}

哪个输出:

$ java TimeTest 
Time stamp value is: 1332917100000
Date value after parse: Wed Mar 28 11:00:00 BST 2012
Time value passed in was: 2012-03-28 10:00:00 +0000

我该如何解决这个问题?

【问题讨论】:

    标签: java date simpledateformat


    【解决方案1】:

    这意味着“这是 BST 的日期和时间,与 UTC 相差 +0000”

    那是你的问题。 BST 比 UTC 早一小时。所以上午 11 点 BST 是上午 10 点 UTC,因此你的输出。您可能应该在UTC 上阅读更多内容。

    英国不是在“timezone UTC+0000”中,它在“timezone Europe/London”中,冬季是UTC+0,夏季是UTC+1。

    (正如 Bogdan 所说,时区很难,Joda Time 是一个比内置 Java 更好的日期/时间库无论如何...但它会给你相同的答案...)

    编辑:为了清楚起见,这个值“2012-03-28 10:00:00 +0000”表示任何健全的系统中的世界标准时间上午 10 点。那是英国夏令时上午 11 点,正如 Java 向您展示的那样。如果你想让它具有其他意义,你应该停止这样做,因为你会与人类已知的几乎所有系统不一致。

    【讨论】:

    • 是的,我知道 UTC 是如何工作的,我想说的是我有时间在 BST 而不是 UTC。我没有将它作为 UTC 发送,我发送它代表 BST 上午 10 点,并希望 JAVA 将我的 BST 上午 10:00 转换为 UTC 上午 9:00。
    • @Mo.:你似乎知道 UTC 是如何运作的,因为你在你的帖子中多次断言英国是当我们不是时,在“UTC+0000”。 BST 不是 +0000。英国不是 UTC+0000 时区。时区偏移量是与 UTC 的偏移量,而不是与“您所在时区的标准时间”的偏移量。
    • 我所说的 BST 的意思是,我的时间基本上代表当时的英国时间(我的当地时间上午 10:00,而不是世界标准时间上午 10:00)
    • 如果您要解析任何语言的日期,对于英国,您的偏移量将为 +0000,对吗?不管是夏天还是冬天。
    • @Mo.:那么你的值不应该使用“+0000”,因为那是不是与 UTC 的偏移量。我们在 UTC+0000 时区(这将是一个没有任何 DST 转换的固定时区)。我们位于“欧洲/伦敦”时区。
    【解决方案2】:

    时区管理是构建 Web 应用程序时最具挑战性的部分之一 :)。但是网络上有几个很好的项目可以为这种情况提供很好的支持。其中之一是 Joda Time

    http://joda-time.sourceforge.net/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-01
      • 2014-02-04
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多