[英]Converting timestamp from parse.com in java
我从parse.com将我的对象的createdAt时间戳作为2014-08-01T01:17:56.751Z返回。 我有一个将其转换为相对时间的类。
public static String timeAgo(String time){
PrettyTime mPtime = new PrettyTime();
long timeAgo = timeStringtoMilis(time);
return mPtime.format( new Date( timeAgo ) );
}
public static long timeStringtoMilis(String time) {
long milis = 0;
try {
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sd.parse(time);
milis = date.getTime();
} catch (Exception e) {
e.printStackTrace();
}
return milis;
}
问题在于这错误地解析了日期。 现在的结果是4年前,这是非常错误的。 我做错了什么?
您当前的日期格式"yyyy-MM-dd HH:mm:ss"
不适用于给定的示例2014-08-01T01:17:56.751Z
。 格式缺少字符T
和Z
以及毫秒。 更改为:
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
要解决这个问题。
还请检查SimpleDateFormat
的JavaDoc中的示例,因为它还会显示示例的正确日期格式: http : //docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html 。
扩展@Tom的答案:
硬编码'Z'时,您假定所有日期都保存为UTC-不一定是这种情况。
问题在于,SimpleDateFormat无法将文字'Z'
识别为UTC的“ -0000”偏移量的别名(无论出于何种原因,因为它声称符合ISO-8601)。
所以你做不到
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
因为这错误地假定所有日期都将始终像UTC一样被编写,但是您不能这样做
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
也可以,因为这将无法解析文字“ Z”出现的日期。
此数据类型转换器实际上是 ISO8601标准,可用于一样简单
import javax.xml.bind.DatatypeConverter;
public Long isoToMillis(String dateString){
Calendar calendar = DatatypeConverter.parseDateTime(dateString);
return calendar.getTime().getTime();
}
如果仍然使用JAXB,那将是一种方法。
final static String ZULUFORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
final static String OFFSETFORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
/* This is a utility method, so you want the calling method
* to be informed that something is wrong with the input format
*/
public static Long isoToMillis(String dateString) throws ParseException{
/* It is the default, so we should use it by default */
String formatString = ZULUFORMAT;
if(! dateString.endsWith("Z") ) {
formatString = OFFSETFORMAT;
}
SimpleDateFormat sd = new SimpleDateFormat(formatString);
return sd.parse(dateString).getTime();
}
如果尚未使用JAXB,则可能需要将此方法放入实用程序类中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.