【问题标题】:convert epoch json format string to date on java [duplicate]在java上将epoch json格式字符串转换为日期[重复]
【发布时间】:2020-12-09 06:50:54
【问题描述】:

我有一个我从服务收到的字符串是一个日期,这个日期有这种格式 "/Date(1607490140063-0600)/" 是一个字符串,现在我需要在 java 上从一个字符串转换为日期格式,我尝试了不同的方法但没有工作

String endTime = getPunchTime();
SimpleDateFormat timeFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss Z");
Date d2 = timeFormat.parse(endTime);

【问题讨论】:

  • 破折号之前的时间是否以毫秒为单位?破折号后面是什么?
  • 接收日期为:/Date(1607490140063-0600)/或1607490140063-0600
  • @MustafaPoya is "/Date(1607490140063-0600)/"
  • 我建议你不要使用SimpleDateFormatDate。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用OffsetDateTimejava.time, the modern Java date and time API 中的其他类。
  • 我刚刚更新了my answer to the linked original question,使用了我认为更优雅的新解决方案。请看一看。

标签: java


【解决方案1】:

编写解析值的辅助方法,并使用正则表达式解析文本,例如像这样:

static OffsetDateTime parseJsonDate(String s) {
    Pattern p = Pattern.compile("/Date\\((-?\\d+)([+-]\\d{4})\\)/");
    Matcher m = p.matcher(s);
    if (! m.matches())
        throw new DateTimeParseException("Not a valid JSON Date string: " + s, s, 0);
    return Instant.ofEpochMilli(Long.parseLong(m.group(1))).atOffset(ZoneOffset.of(m.group(2)));
}

测试

System.out.println(parseJsonDate("/Date(1607490140063-0600)/"));

输出

2020-12-08T23:02:20.063-06:00

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多