gpt4 book ai didi

Java SimpleDateformat 秒后有 10 位小数,无法转换为 Date

转载 作者:行者123 更新时间:2023-12-01 06:34:17 24 4
gpt4 key购买 nike

我正在尝试将 10 毫秒 (2018-11-02 6:05:59.1541162159 PM) 的日期字符串转换为日期,但无法获取确切的日期。

要转换的代码:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class DateFormatCheck {
private static TimeZone tz = TimeZone.getTimeZone("Asia/Colombo");
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS aa");

public static void main(String[] a){
try {
Calendar cal = Calendar.getInstance(tz);
sdf.setCalendar(cal);
cal.setTime(sdf.parse("2018-11-02 6:05:59.1541162159 PM"));
Date date = cal.getTime();
System.out.println(date);
}catch (Exception e){
e.printStackTrace();
}
}
}

输出:

Tue Nov 20 02:12:01 IST 2018

最佳答案

目前存在多个问题。我强烈建议使用java.time来完成尽可能多的工作,尽管即使这样也不容易。

正如你所说,你的值有 10 位数字表示“秒的一小部分”——这意味着它的精度下降到十分之一纳秒。根据我的经验,这是非常不寻常的 - 而且我不认为 Java 可以处理这个问题,即使使用 java.time

我怀疑您需要先处理数据,将精度降低到 9 位数字。此时,将值解析为 ZonedDateTime 相当简单:

// Note this only has 9 digits of precision, not the original 10
String text = "2018-11-02 6:05:59.154116215 PM";
ZoneId zone = ZoneId.of("Asia/Colombo");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"yyyy-MM-dd h:mm:ss.SSSSSSSSS a", Locale.US)
.withZone(zone);
ZonedDateTime parsed = ZonedDateTime.parse(text, formatter);
System.out.println(parsed);

请注意我如何提供 SSSSSSSSS 作为秒的小数部分,以处理所有 9 个数字。另请注意使用 h 而不是 HH - HH 表示“一天中的 24 小时,填充 0” - 两者都不是这对于您的原始值来说是正确的,它使用“6”表示下午 6 点。您很少会将 HHHa 组合起来。

该代码为您提供了一个 ZonedDateTime,您可以将其转换为 Date,如下所示:

Date date = Date.from(parsed.toInstant());

我建议您不要这样做,除非您出于互操作原因确实需要这样做; Date API 在很多方面都很糟糕。

关于Java SimpleDateformat 秒后有 10 位小数,无法转换为 Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53119952/

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