Java时间戳字符串解析

Java时间戳字符串解析,java,timezone,simpledateformat,Java,Timezone,Simpledateformat,我需要将字符串时间戳值转换为Java日期对象。字符串的格式为“2011-03-16T09:00:00-05:00”。我是否可以使用SimpleDataFormat以日期对象的形式加载此数据z’、‘z’和‘zzzzz’是我所知道的唯一时区表示形式,它们都不能表示我的时区数据(-05:00)。有人解决了这个问题吗 谢谢 JodaTime可能会有所帮助。考虑使用它和自定义格式化程序(称为“怪异格式化程序”)。< /P> JodaTime可能会有所帮助。考虑使用它和自定义格式化程序(称为“怪异格式化程序

我需要将字符串时间戳值转换为Java日期对象。字符串的格式为“2011-03-16T09:00:00-05:00”。我是否可以使用SimpleDataFormat以日期对象的形式加载此数据z’、‘z’和‘zzzzz’是我所知道的唯一时区表示形式,它们都不能表示我的时区数据(-05:00)。有人解决了这个问题吗


谢谢

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

不幸的是,时区中的冒号使事情有点复杂。您可能想看一看。

不幸的是,时区中的冒号使事情有点复杂。您可能想看看。

看到提供的时间戳格式与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
加州年份=2011年 计算月=3
校准日=16
校准小时=9
校准分钟=0
校准秒=0
校准时区=-300
cal.eonAndYear=2011年


看到提供的时间戳格式与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
加州年份=2011年 计算月=3
校准日=16
校准小时=9
校准分钟=0
校准秒=0
校准时区=-300
cal.eonAndYear=2011年


您应该能够将“00:00-05:00”与单个
z
(小写)匹配。这不起作用?我想:符号会把它扔掉:SimpleDataFormat想要“-0500”,而不是“-05:00”。解决这个问题的一种方法是咬紧牙关,手动删除冒号,然后将其传递给SimpleDataFormat。您可以发布一些代码吗?有几种不同的方法可以解决这个问题,我们如何回答取决于您使用的方法。@iluxa不正确,请参阅:。它的示例字符串“GMT-08:00”应该与
z
匹配。您应该能够将“00:00-05:00”与单个
z
(小写)匹配。这不起作用?我想:符号会把它扔掉:SimpleDataFormat想要“-0500”,而不是“-05:00”。解决这个问题的一种方法是咬紧牙关,手动删除冒号,然后将其传递给SimpleDataFormat。您可以发布一些代码吗?有几种不同的方法可以解决这个问题,我们如何回答取决于您使用的方法。@iluxa不正确,请参阅:。它的示例字符串“GMT-08:00”应该与
z
Thank匹配。这是一个很好的解决方案。现在,因为我只需要一个奇怪的例子,我将考虑一些EAJ建议的字符串正则表达式,并使用相同的简单SimeDead格式。谢谢你,没问题。你最终会回到乔达时代。我花了几个项目来支持它汉克斯。这是一个很好的解决方案。现在,因为我只需要一个奇怪的例子,我将考虑一些EAJ建议的字符串正则表达式,并使用相同的简单SimeDead格式。谢谢你,没问题。你最终会回到乔达时代。我花了几个项目来支持它D