0

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

4

6 回答 6

5

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

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

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

于 2012-08-16T09:31:37.883 回答
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
于 2014-10-29T09:14:18.573 回答
3

首先像这样替换字符串:

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());
}
于 2017-06-02T09:15:11.170 回答
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"));
于 2021-04-21T07:03:10.653 回答
1

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

于 2012-08-16T09:27:59.070 回答
0

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

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

链接

于 2019-08-08T11:35:18.130 回答