“EEE MMM dd HH:mm:ss ZZZ yyyy”日期格式为java.sql.Date
我正在尝试将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实际上只是半个时区,因为它现在使用的地方是EEST(夏令时)。 最好使用像
Europe/Bucharest
这样的长时区ID,或者像+02:00
那样使用UTC的偏移量。
无论您使用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
(月中的某天)。 所有这些信件都在文件中 。