2011-06-08 63 views
2

我不能完全弄清楚什么格式应该是解析这个日期。它是一个毫秒值,然后是时区。谢谢。如何解析这个日期

// so far tried: "S Z" 
//    "SSSSSSSSSSS-ZZZZ", 
//    "SSSSSSSSSSS-Z", 
// etc. 

Format formatter = new SimpleDateFormat("SSSSSSSSSSSS Z", Locale.CANADA); 

// source string looks like this /Date(928164000000-0400)/ 
String temp = jsonUserObj.getString("DateOfBirth").substring(6, 6+17); 
System.err.println("got date="+temp); 
Date date = (Date) formatter.parseObject(temp); 

回答

1

你可以不用解析器。

String[] parts = new String[]{temp.substring(0, temp.indexOf('-')), temp.substring(temp.indexOf('-') + 1)}; 
long millis = Long.parseLong(parts[0]); 
parts[1] = parts[1].replaceAll("^0*(\\-?[0-9]*)$", "$1"); 
int timeZone = Integer.parseInt(parts[1]); 

int rawOffset = (timeZone/100) * 3600000 + (timeZone % 100); 

GregorianCalendar cal = new GregorianCalendar(); 
cal.setTimeInMillis(millis); 
cal.setTimeZone(new SimpleTimeZone(rawOffset, "GMT")); 
0

的SimpleDateFormat预计毫秒值< 1000,因为它希望你会增加秒钟,然后分钟,等等,对于较大的值。

您需要先将值转换;这篇文章可能有所帮助:Unix epoch time to Java Date object