【问题标题】:Json Date \/Date(1389715867000)/ to convert to java.util.Date in java [duplicate]Json Date \/Date(1389715867000)/ 在java中转换为java.util.Date [重复]
【发布时间】:2017-09-19 20:13:46
【问题描述】:

我有一个带有一个日期字段的 json 请求,如下所示:
"PolicyEffectiveDate": "\/Date(1389715867000)/\"

我想把它解析成java.util.Date类型的java对象 我知道如何在 javascript 中做到这一点 javascript 中的日期 here 和 ionic here 但 我需要在java中做到这一点。请帮忙。

【问题讨论】:

  • 您是否尝试从该字符串中提取长值并从中创建new Date(value)?
  • “我需要在 java.util.date 中以 dd/MM/yyy 格式解析这个日期”——这是什么意思?不是dd/MM/yyyy格式,java.util.Date也没有有格式,那么dd/MM/yyyy是从哪里来的呢?
  • 不,这不是您需要的。您需要将输入字符串的数字部分提取为 long,然后从该 long 值构造一个 Date(或者最好是 Java 8 Instant),该值表示自纪元以来的毫秒数。然后,一旦您拥有该 Date 或 Instant 对象,您就可以使用您想要的格式(和时区)将其转换为另一个字符串。日期/即时没有任何格式。就像双精度一样,即使你想显示为 2,345.67,也没有任何格式。
  • @JBNizet 我已经修改了我的问题。感谢您宝贵的 cmets。
  • 顺便说一句,您有什么理由仍在使用早已过时的Date 类?今天我们在the modern java date and time API known as java.time or JSR-310 中做得更好。 JB Nizet 已经在a comment 中说过你应该更喜欢Instant。我同意 200%。

标签: java json date


【解决方案1】:
String policyEffective = ...

long time = Long.parseLong(policyEffective.replaceFirst("^.*Date\\((\\d+)\\).*$", "$1"));
Date date = new Date(time);

从 1970 年左右开始,这个数字很长,毫秒,因此进入 Date 构造函数。

结果:

Tue Jan 14 17:11:07 CET 2014

因为你有一个非法的论点;也许你拿了一个 int 或其他东西。

【讨论】:

  • 得到无效的转义序列。
  • 抱歉d之前只有一个反斜杠。
  • 是的,它成功了!谢谢。
【解决方案2】:
long time = Long.parseLong(policyEffective.subString(
policyEffective.indexOf("(")+1,policyEffective.lastIndexOf(")"))));
Date date = new Date(time);

这种方式会将字符串从“(”的索引修剪到“)” 所以它只会提取数字

【讨论】:

    【解决方案3】:
    import java.util.Date;
    public class JsonDate {
    
        public static void main(String[] args) {
            String jsonDate = "\\" + "/Date(1389715867000)" + "/" + "\\";
            jsonDateToUtilDateConverter(jsonDate);
            System.out.println(jsonDate);
        }
    
        private static void jsonDateToUtilDateConverter(String jsonDate) {
            String epochDate = jsonDate.replaceAll("[^0-9]", "");
    
            Date date = new Date(Long.parseLong(epochDate));
            System.out.println("date: "+date);
            System.out.println(epochDate);
    
        }
    }
    

    我得到的输出是:

    日期:2014 年 1 月 14 日星期二 21:41:07 IST
    1389715867000
    /日期(1389715867000)/\

    【讨论】:

    • 基于 Jon skeet 和 jbNizet 提供的建议。
    • 使用 java.time api... String epochDate = jsonDate.replaceFirst("^.*Date\((\\d+)\).*$", "$1"); LocalDate epochFromLocalDate = Instant.ofEpochMilli(Long.parseLong(epochDate)).atZone(ZoneId.systemDefault()).toLocalDate(); System.out.println(epochFromLocalDate);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多