gpt4 book ai didi

java - 将字符串值转换为日期对象时输出不匹配

转载 作者:行者123 更新时间:2023-11-30 11:06:18 24 4
gpt4 key购买 nike

我试图将字符串值转换为日期对象。我尝试了一些逻辑,但没有用。看我的代码:

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

在输出中,给定日期和解析日期不匹配,我在我的代码中找不到任何错误。如果您找到解决方案,请告诉我...

提前致谢。

最佳答案

问题在于将服务器格式与您的解析格式相匹配。

您指定 .SSS 来处理毫秒,但在默认配置中,“S”的数量无关紧要,SimpleDateFormat 将消耗直到下一个分隔符。这意味着它将解析第一个字段,并在最后添加 162430057 毫秒(大约 45 小时),这会让您到达(正确的,但不需要和意外的)IST 2015 年 4 月 1 日星期三 09:01:56。

如果您使用的是 Java 8,我建议您查看 DateTimeFormatter可以处理纳秒或者如果 Java 8 之前使用 Joda Time .

如果您运行的是 JDK 1.3(根据供应商的不同,它的生命周期结束于 2006/2007)并且您确定时间格式,那么您可以使用:

fmt(text.substring(0, 23) + 'Z')

或者可能删除 + 'Z' 并从格式中删除 'Z'

在任何情况下使用 Date 都将失去纳秒精度,因为 Date 只包含毫秒。

关于java - 将字符串值转换为日期对象时输出不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29363610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com