如何将Json Date转换为Java Date

时间:2012-08-16 09:23:31

标签: java android json date

我正在尝试将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)/

6 个答案:

答案 0 :(得分:5)

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

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

getTimeStampFromTarih提取“+”

出现之前的毫秒数

答案 1 :(得分:2)

首先替换这样的字符串:

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());
}

答案 2 :(得分:2)

您需要输入演员日期:

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"));

答案 3 :(得分:1)

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

答案 4 :(得分:1)

这肯定会有效

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

答案 5 :(得分:0)

java.time

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

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

npx

此打印:

  

2016-11-24T08:00:00Z

我不清楚您是否需要使用区域偏移量以及用于什么目的。但是,既然我们已经掌握了它,为什么不从匹配器中检索它,并使用它来形成 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); } ,即具有UTC偏移量的日期和时间。方法如下:

OffsetDateTime
  

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

如果您需要老式 ZoneOffset zo = ZoneOffset.of(m.group(2)); OffsetDateTime odt = OffsetDateTime.ofInstant(i, zo); System.out.println(odt); 来使用某些旧版API:

java.util.Date

或者如果使用下面链接中提到的反向端口:

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

在我的计算机上打印

  

2011年12月5日星期一13:24:00欧洲中部时间

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

链接