&引用;EEE MMM dd HH:mm:ss ZZZ yyyy“;日期格式转换为java.sql.date
我正在尝试将&引用;EEE MMM dd HH:mm:ss ZZZ yyyy“;日期格式转换为java.sql.date,java,mysql,sql,date,Java,Mysql,Sql,Date,我正在尝试将EEE MMM dd HH:mm:ss ZZZ yyyyy转换为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 for
EEE MMM dd HH:mm:ss ZZZ yyyyy
转换为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);
我正在使用java.time
包中的现代类。您注意到,代码不仅更简单,一旦您熟悉了新类的流畅编写风格,代码也更清晰了
如果您想100%现代化,还应该检查您最新的MySQL JDBC驱动程序是否不会直接接受LocalDate
,而不转换为java.sql.Date
。应该这样
需要注意的几个细节
- 如果您需要在您无法控制的计算机上运行代码,请始终为格式化程序提供区域设置,否则无法在非英语区域设置的计算机上解析日期字符串。您可以将
用于与语言环境无关的语言环境(它讲英语)Locale.ROOT
- 如果可以,请避免使用三个字母的时区缩写。许多是模棱两可的。EET实际上只是半个时区,因为一些使用它的地方现在是EEST(夏季)。最好使用长时区ID,如
,或者使用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
(基于周的年份)更改为yyy
(日历年),并将DD
(一年中的一天)更改为DD
(月中的一天)。所有这些字母都在中。我知道这个问题与java.sql.Date有关,但作为附加信息,如果您想将日期转换为LocalDate,下面的代码可能会有所帮助:
private LocalDate getLocalDate(String date){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd hh:mm:ss Z yyyy", Locale.getDefault());
return LocalDate.parse(date, formatter);
}
一旦获得LocalDate,就可以将其转换为任何格式。正如问题所期望的那样,yyyy-MM-dd然后只需在LocalDate对象上调用toString()
LocalDate curr = LocalDate.now();
System.out.println(curr.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
System.out.println(curr.toString());
它将显示日期,如“2019-11-20”
希望这对某人有所帮助。试试
“yyyy-MM-dd”
。非常感谢@Berger
LocalDate curr = LocalDate.now();
System.out.println(curr.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
System.out.println(curr.toString());