2011-03-22 122 views
1

我需要将字符串时间戳值转换为Java日期对象。该字符串的格式为“2011-03-16T09:00:00-05:00”。是否有时区表示我可以使用SimpleDateFormat作为Date对象加载这些数据? 'z','Z'和'zzzz'是我知道的唯一时区表示,并且这些表示都不能代表我的时区数据(-05:00)。有没有人解决过这个问题?Java时间戳字符串解析

谢谢。

+1

你应该能够匹配 “00:00-05:00” 用单个'z'(小写)。这不行? – 2011-03-22 20:15:33

+0

我认为:符号将其抛弃:SimpleDateFormat需要“-0500”,而不是“-05:00”。解决此问题的一种方法 - 咬住子弹,手动删除冒号,然后将其传递给SimpleDateFormat – iluxa 2011-03-22 20:21:11

+0

您可以发布一些代码吗?有几种不同的方式可以解决这个问题,我们如何回答取决于您使用的是哪一种。 – Pops 2011-03-22 20:23:19

回答

0

不幸的是,在该时间段结肠问题复杂化了一点。你可能想看看this question

1

JodaTime可能会有所帮助。考虑使用它和一个自定义格式器(称为“怪异格式器”)。

http://joda-time.sourceforge.net/userguide.html#Input_and_Output

+0

谢谢。这是一个很好的解决方案。现在,因为我只需要一个奇数的情况下,我会考虑eaj建议的一些字符串正则表达式,并使用相同的旧SimpleDateFormat。不管怎么说,多谢拉。 – pjames 2011-03-22 21:10:47

+0

没问题。你最终会来到乔达时间。带了我几个项目来购买它。 :d – Freiheit 2011-03-24 16:22:27

0

鉴于此时间戳格式提供看起来像在XML中使用的标准格式,你可以尝试以下方法:

public static void main(String[] args) throws DatatypeConfigurationException { 

    String inDate = "2011-03-16T09:00:00-05:00"; 

    javax.xml.datatype.DatatypeFactory factory = DatatypeFactory.newInstance(); 

    javax.xml.datatype.XMLGregorianCalendar xmlGregCal = factory.newXMLGregorianCalendar(inDate); 

    java.util.GregorianCalendar gregCal = xmlGregCal.toGregorianCalendar(); 

    java.util.Date dateObj = gregCal.getTime(); 

    System.out.println("cal = " + xmlGregCal.toString()); 
    System.out.println("cal.year = " + xmlGregCal.getYear()); 
    System.out.println("cal.month = " + xmlGregCal.getMonth()); 
    System.out.println("cal.day = " + xmlGregCal.getDay()); 
    System.out.println("cal.hour = " + xmlGregCal.getHour()); 
    System.out.println("cal.minute = " + xmlGregCal.getMinute()); 
    System.out.println("cal.second = " + xmlGregCal.getSecond()); 
    System.out.println("cal.timezone = " + xmlGregCal.getTimezone()); 
    System.out.println("cal.eonAndYear = " + xmlGregCal.getEonAndYear()); 
} 

创建的输出如下:

CAL = 2011-03 -16T09:00:00-05:00
cal.year = 2011 cal.month = 3
cal.day = 16
cal.hour = 9
cal.minute = 0
cal.second = 0
cal.timezone = -300
cal.eonAndYear = 2011