我正在尝试转换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的一些地方(夏令时)。最好使用长时间区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(每月的某天)。所有这些字母都在文档中。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。