我正在尝试将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中。