如何在Java中解析格式为“\ / Date(1339638938087-0500)\ /”的日期字符串?

时间:2012-07-06 19:08:55

标签: java json datetime

我有来自网络服务API的格式为"\/Date(1339638938087-0500)\/"的字符串。

使用java,我如何将它放入org.joda.time.DateTime变量?

3 个答案:

答案 0 :(得分:2)

您需要提取这两位信息:

  • -2208967200000:自unix时代(1970年1月1日UTC)以来的毫秒数
  • -0600:偏离UTC

这假设该示例代表1900年1月1日当地时间午夜 - 因为-2208967200000部分代表UTC时间早上6点。

要将此转换为Joda Time DateTime,您应该提取这两部分(去除括号外的所有内容,然后使用长度来分割它,或者找到中间的+/-符号)

接下来,将第一部分解析为millis部分的long。 然后,解析第二部分 - 可能分别为小时,分钟和签名。 (我假设它的总是以xHHmm的形式,其中x是符号,HH是两位数的分钟,mm是两位数的小时数。)

使用DateTimeZone.forHoursMinutesOffset或类似内容为偏移量创建固定时区。

最后,用

创建时间
new DateTime(millis, zone);

哦,然后踢任何人制作如此可怕的格式......

答案 1 :(得分:0)

这看起来像unix时间戳

  

unix时间戳是一种将时间跟踪为运行总计的方法   秒。这个计数始于1970年1月1日的Unix Epoch

答案 2 :(得分:0)

如果“2208967200000”是自1970年1月1日00:00:00以来的毫秒时间,您可以在构造函数中使用它来表示日期(时间);

String dateStr="Date(-2208967200000-0600)";
String timeInMillis=dateStr.Split("-")[1];
String utcStr=dateStr.Split("-")[2].Substring(0,4);
Date d=new Date(Long.parseLong(timeInMillis));

如果你愿意,你可以在必要时处理utcStr(如果“ - ”之后的第二部分是时区)