我接收的日期时间字符串没有时区限定符格式:
2014-01-30 07:48:25
我知道字符串是由佛罗里达州的服务器生成的。有没有办法使用java.util或joda Date libs来指定日期来自佛罗里达州,然后使用appripriate UTC偏移量解析它,具体取决于夏令时在日历中的位置?
答案 0 :(得分:3)
假设您指的是EST后佛罗里达州的部分,您可以设置SimpleDateFormat
的时区并将您的TimeZone设置为EST。
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("America/New_York"));
Date date = format.parse("2014-01-30 07:48:25");
您的解析日期现在可以由您系统的默认TimeZone
使用(或者像我们在第一时间那样按照您的喜好设置它)。
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
System.out.println(date);
我得到的日期偏移到UTC的输出:
Thu Jan 30 12:48:25 UTC 2014
答案 1 :(得分:2)
您可以为SimpleDateFormat
的实例提供“源时区”,然后将待解析的日期字符串转换为您的本地/默认时区。
TimeZone timeZone = TimeZone.getTimeZone("America/New_York")
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
sdf.setTimeZone(getTimeZone(source));
提供时区名称时要小心。 TimeZone
如果您传入一个不理解为时区的字符串,则会默默地故障转移到GMT。
答案 2 :(得分:2)
只是为了完成以前的答案。与Joda-Time相同的功能:
DateTime dateTime = DateTime.parse("2014-01-30 07:48:25", DateTimeFormat
.forPattern("yyyy-MM-dd HH:mm:ss")
.withZone(DateTimeZone.forID("America/New_York")));
System.out.println(dateTime);
System.out.println(dateTime.withZone(DateTimeZone.UTC));
System.out.println(dateTime.withZone(DateTimeZone.forID("Europe/Madrid")));
---
2014-01-30T07:48:25.000-05:00
2014-01-30T12:48:25.000Z
2014-01-30T13:48:25.000+01:00