gpt4 book ai didi

java - "EEE MMM dd HH:mm:ss ZZZ yyyy"日期格式转换为java.sql.Date

转载 作者:行者123 更新时间:2023-11-29 10:49:51 25 4
gpt4 key购买 nike

我正在尝试将 EEE MMM dd HH:mm:ss ZZZ yyyy 转换为 YYYY-MM-DD 格式,以便我可以将其插入 MySQL 数据库。我没有收到任何错误,但插入到我的数据库中的日期是错误的,并且每行都相同......

 String date = Sat Mar 04 09:54:20 EET 2017;
SimpleDateFormat formatnow = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZ yyyy");
SimpleDateFormat formatneeded=new SimpleDateFormat("YYYY-MM-DD");

java.util.Date date1 = (java.util.Date)formatnow.parse(date);
String date2 = formatneeded.format(date1);
java.util.Date date3= (java.util.Date)formatneeded.parse(date2);


java.sql.Date sqlDate = new java.sql.Date( date3.getTime() );
pst.setDate(1, sqlDate);

最佳答案

    LocalDate date4 = ZonedDateTime
.parse(date, DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH))
.toLocalDate();
java.sql.Date date5 = java.sql.Date.valueOf(date4);

我正在使用 java.time 中的现代类包裹。你会发现代码不仅更简单,一旦你熟悉了新类的流畅写作风格,它也更清晰。

如果您想 100% 现代,您还应该检查您最新的 MySQL JDBC 驱动程序是否不接受 LocalDate直接不转换为java.sql.Date 。应该如此。

一些需要注意的细节

  • 如果您需要代码在您无法控制的计算机上运行,​​请始终为格式化程序提供区域设置,否则无法在非英语区域设置的计算机上解析您的日期字符串。您可以使用Locale.ROOT对于中立的语言环境(它说英语)。
  • 如果可以的话,请避免使用三个字母的时区缩写。很多都是模棱两可的。 EET 实际上只是半个时区,因为一些使用 EET 的地方现在处于 EEST(夏令时)。最好使用长时区 ID,如 Europe/Bucharest或与 UTC 的偏移量,如 +02:00 .

无论您是否使用DateTimeFormatter,这些点都有效。或SimpleDateFormat .

如果您不能或不想继续使用推荐的较新类,则对代码的修复是:

    SimpleDateFormat formatnow 
= new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
SimpleDateFormat formatneeded = new SimpleDateFormat("yyyy-MM-dd");

我使用小写zzz因为这被记录为匹配三个字母的时区名称,所以我知道大写 ZZZ也有效。我已经添加了语言环境。也许最重要的是,我改变了所需的格式 YYYY (基于周的年份)至 yyyy (日历年)和 DD (一年中的某一天)至 dd (一个月中的某一天)。所有这些字母都在 the documentation 中.

关于java - "EEE MMM dd HH:mm:ss ZZZ yyyy"日期格式转换为java.sql.Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43933597/

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