Mo.*_*Mo. 3 java date simpledateformat
我有一个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"
Run Code Online (Sandbox Code Playgroud)
但是当我在我的Java REST服务中收到这个字符串并尝试使用SimpleDateFormater将其解析为日期对象时,它假定我说的是:"这是UTC时间10:00,我位于UTC + 0000时区"因此它将其定位为UTC时间上午10:00而不是UTC时间上午9: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){}
Run Code Online (Sandbox Code Playgroud)
哪个输出:
$ 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
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
这是为了说"这是BST的日期和时间,它与UTC的偏移量为+0000"
那是你的问题.BST比UTC早一个小时.所以BST上午11点是UTC时间,因此你的输出.您可能应该阅读更多关于UTC的内容.
英国不在 "时区UTC + 0000",它位于"时区欧洲/伦敦",冬季为UTC + 0,夏季为UTC + 1.
(作为波格丹说,时区硬,约达时间是不是一个更好的日期/时间库中的内置Java一个反正 ...但它会给你同样的答案...)
编辑:只是为了使其完全清楚,这个值"2012-03-28 10:00:00 +0000"表示在任何理智的系统中的上午10点UTC.那是早上11点的BST,正如Java向你展示的那样.如果你试图让它意味着别的东西,你应该停止这样做,因为你将与人类已知的每个系统发生冲突.
| 归档时间: |
|
| 查看次数: |
3011 次 |
| 最近记录: |