java - "EEE MMM dd HH:mm:ss ZZZ yyyy"日期格式转换为java.sql.Date

标签 java mysql 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 实际上只是半个时区,因为一些使用 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 中.

关于java - "EEE MMM dd HH:mm:ss ZZZ yyyy"日期格式转换为java.sql.Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43933597/

相关文章:

java - 绘制后组件不显示

SQL Server WITH 语句

SQL |加入使用vs加入

java - 为什么 startActivityForResult() 方法在这种情况下不起作用

java - 避免从不同的服务获取文件服务器的相同文件

java - 为什么 EclEmma 不使用 @RunWith(PowerMockRunner.class) 的测试覆盖代码

python - pymysql SELECT 查询,其中包含用户作为输入提供的表字段

mysql - 下面的操作是否是原子的?

mysql - 无法向表添加约束

SQL 对层次结构中的节点重新排序