1

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

谢谢。

4

3 回答 3

1

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

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

于 2011-03-22T20:23:12.077 回答
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

于 2011-03-22T21:14:21.327 回答
0

不幸的是,时区中的冒号使事情变得有些复杂。您可能想看看这个问题

于 2011-03-22T20:23:55.293 回答