我正在尝试将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)/
答案 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)
这是现代答案(自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欧洲中部时间
确切的输出将取决于您的时区。
System.out.println(DateTimeUtils.toDate(i));
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。