没有时区信息的阅读日期

时间:2014-01-30 17:05:26

标签: java date datetime jodatime

我接收的日期时间字符串没有时区限定符格式:

2014-01-30 07:48:25

我知道字符串是由佛罗里达州的服务器生成的。有没有办法使用java.util或joda Date libs来指定日期来自佛罗里达州,然后使用appripriate UTC偏移量解析它,具体取决于夏令时在日历中的位置?

3 个答案:

答案 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