开发者社区> 问答> 正文

“ 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);

展开
收起
保持可爱mmm 2020-05-11 16:07:37 1429 0
1 条回答
写回答
取消 提交回答
  • 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

    2020-05-11 16:07:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载