Java:日期和偏移量问题?

标签 java date simpledateformat

我有一个网络应用程序,如果客户端(在英国,时区为 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 时区”,因此它将其存储为 10:00 AM UTC 时间而不是 09:00 AM UTC 时间,这是从 10:00 AM BST(+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

我该如何解决这个问题?

最佳答案

this is meant to say "This is the date and time BST which is +0000 offset from UTC"

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

英国处于“UTC+0000 时区”,它处于“欧洲/伦敦时区”,冬季为 UTC+0,夏季为 UTC+1。

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

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

关于Java:日期和偏移量问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9925028/

相关文章:

java - 无法从 url 获取图像

java - java应用程序中的进度条和线程错误

vba - 根据今天的日期计算当前和随后的 FY Quarter

python - 根据包含 N (pandas) 的另一列获取一列月份的前 N ​​个月

oracle - 您如何获得 Oracle 中的最大可能日期?

java - Android SimpleDateFormat 无法解析的日期

java - 将字符串解析为 'yyyy-mm-ddThh:mm:ss.SSSZ' ISODate java

java - 解决 Eclipse 警告 "isn' t 参数化的正确方法是什么?

java - 在 Java 中使用 for 循环打印模式

Java SimpleDateFormat 使用具有欢乐性格的模式