我试图将字符串值转换为日期对象。我尝试了一些逻辑,但它没有用。看我的代码:
public class Test {
public static void main(String[] args) {
try{
Test obj= new Test();
String date="2015-03-30T11:54:46.162430057Z";
Date dt=obj.getServerDate(date);
//System.out.println(dt);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public Date getServerDate(String str_date)
{
if (str_date == null)
return null;
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
System.out.println("Given date:" + str_date);
Date pars_date = null;
try
{
pars_date = fmt.parse(str_date);
System.out.println("Parsed date:" + pars_date);
}
catch (Exception e)
{
e.printStackTrace();
}
return pars_date;
}
}
上面的代码给出了以下输出:
Given date:2015-03-30T11:54:46.162430057Z
Parsed date:Wed Apr 01 09:01:56 IST 2015
在输出中,给定日期和解析日期不匹配,我在代码中找不到任何错误。如果您找到解决方案,请告诉我......
提前致谢。
答案 0 :(得分:1)
问题在于将服务器格式与解析格式相匹配。
指定.SSS来处理毫秒,但在默认配置中,指定" S"没关系,SimpleDateFormat将消耗到下一个分隔符。这意味着它将解析第一个字段,最后添加162430057毫秒(约45小时),这将使您获得(正确但不需要的和意外的)2015年4月1日09:01:56 IST 2015.
如果您使用的是Java 8,我建议改为查看可以处理纳秒的DateTimeFormatter,或者在Java 8之前使用Joda Time。
如果您运行的是JDK 1.3(根据供应商提供的是2006/2007生命终止版)并且您确定时间格式,那么您可以使用:
fmt(text.substring(0, 23) + 'Z')
或可能删除+ 'Z'
并从格式中删除'Z'
。
使用日期,在任何情况下都会失去纳秒精度,因为日期只有毫秒。