【问题标题】:How can I convert Json Date to Java Date如何将 Json 日期转换为 Java 日期
【发布时间】:2012-08-12 15:03:43
【问题描述】:

我正在尝试将 Json 日期字符串转换为 java 日期格式。但是,当涉及到“return df.parse(tarih)”行时,它会出错。

JSON:

{"DateFrom":"\/Date(1323087840000+0200)\/"}

Java 代码:

private Date JSONTarihConvert(String tarih) throws ParseException
{


    SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ssz" );


    if ( tarih.endsWith( "Z" ) ) {
        tarih = tarih.substring( 0, tarih.length() - 1) + "GMT-00:00";
    } else {
        int inset = 6;


        String s0 = tarih.substring( 6, tarih.length()-1 - inset );
        String s1 = tarih.substring( tarih.length()- inset,tarih.length()-2 );

        tarih = s0 + "GMT" + s1;
    }


        return df.parse( tarih );

}

当我调用这个方法时,tarih参数是:/Date(1323087840000+0200)/

【问题讨论】:

  • 究竟是什么错误,您能否也发布一个 tarih 的示例? :)
  • 提供的日期没有-。然后,您也可以在没有- 的情况下将该字符串转换为其他内容。然后您的日期格式无法正确解析它,因为它需要-。
  • Tarih 是来自土耳其语的日期,基本上 tarih 是他试图解析的 JSON 日期。

标签: java android json date


【解决方案1】:

除非您有理由不这样做,否则您应该使用解析器来序列化和反序列化对象。喜欢Jackson解析器。

【讨论】:

    【解决方案2】:

    由于您对 Date 对象感兴趣,而我认为 JSON 是一个 unix 时间戳。
    因此,我向您推荐Date(long milliseconds) 构造函数:)

    private Date JSONTarihConvert(String tarih) throws ParseException{
        long timestamp = getTimeStampFromTarih(tarih);
        return new Date(timestamp);
    }
    

    其中getTimeStampFromTarih提取“+”出现之前的毫秒数

    【讨论】:

      【解决方案3】:

      这肯定会奏效

      String date = "/Date(1376841597000)/";
      Calendar calendar = Calendar.getInstance();
      String datereip = date.replace("/Date(", "").replace(")/", "");
      Long timeInMillis = Long.valueOf(datereip);
      calendar.setTimeInMillis(timeInMillis);
      System.out.println(calendar.getTime().toString("dd-MMM-yyyy h:mm tt"));//It Will Be in format 29-OCT-2014 2:26 PM
      

      【讨论】:

        【解决方案4】:

        首先像这样替换字符串:

        String str= ConvertMilliSecondsToFormattedDate(strDate.replace("/Date(","").replace(")/", ""));

        然后像这样转换它:

        public static String ConvertMilliSecondsToFormattedDate(String milliSeconds){
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(Long.parseLong(milliSeconds));
            return simpleDateFormat.format(calendar.getTime());
        }
        

        【讨论】:

          【解决方案5】:

          java.time

          这是现代答案(自 2014 年以来)。

          首先,我想确保我拥有的时间戳确实符合我期望的格式。我想确定如果有一天它没有,我不只是假装用户会得到不正确的结果而不知道它们是不正确的。因此,为了解析时间戳字符串,由于我没有找到可以接受自纪元以来的毫秒数的日期时间格式,所以我使用了正则表达式:

              String time = "/Date(1479974400000-0800)/";
              Pattern pat = Pattern.compile("/Date\\((\\d+)([+-]\\d{4})\\)/");
              Matcher m = pat.matcher(time);
              if (m.matches()) {
                  Instant i = Instant.ofEpochMilli(Long.parseLong(m.group(1)));
                  System.out.println(i);
              }
          

          打印出来:

          2016-11-24T08:00:00Z

          我不清楚您是否需要使用区域偏移量以及用于什么目的。但是既然我们已经得到它,为什么不从匹配器中检索它并使用它来形成一个OffsetDateTime,一个带有UTC偏移的日期和时间。方法如下:

                  ZoneOffset zo = ZoneOffset.of(m.group(2));
                  OffsetDateTime odt = OffsetDateTime.ofInstant(i, zo);
                  System.out.println(odt);
          

          2011-12-05T14:24+02:00

          如果您需要老式的java.util.Date 来获取一些旧版 API:

                  System.out.println(Date.from(i));
          

          或者如果使用以下链接中提到的反向移植:

                  System.out.println(DateTimeUtils.toDate(i));
          

          在我的电脑上打印

          2011 年 12 月 5 日星期一 13:24:00 CET

          确切的输出取决于您的时区。

          链接

          【讨论】:

            【解决方案6】:

            您需要输入演员表日期:

            String rawdate = "/Date(1995769286000)/";
            Calendar calendarins = Calendar.getInstance();
            String datereip = rawdate.replace("/Date(", "").replace(")/", "");
            Long timeInMillis = Long.valueOf(datereip);
            calendar.setTimeInMillis(timeInMillis);
            System.out.println(calendar.getTime().toString("dd-MMM-yyyy h:mm tt"));
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-06-07
              • 1970-01-01
              • 2020-01-09
              • 1970-01-01
              相关资源
              最近更新 更多