使用Java 8和格式->'uuuu-MM-dd'将String转换为日期

jit*_*ney 2 java java-8

我想使用Java 8从字符串转换为日期。

我可以轻松地使用SimpleDateFormat和进行yyyy-MM-dd格式转换

   String startDate2="2017-03-24";
   SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
   System.out.println(new java.sql.Date(sdf1.parse(startDate2).getTime()));
Run Code Online (Sandbox Code Playgroud)

输出: 2017-03-24

   String startDate2="2017-03-24";
   SimpleDateFormat sdf1 = new SimpleDateFormat("uuuu-MM-dd");
   System.out.println(new java.sql.Date(sdf1.parse(startDate2).getTime()));
Run Code Online (Sandbox Code Playgroud)

但是当我用'uuuu-MM-dd'代替'yyyy-MM-dd'

输出:( 1970-03-24错误)

现在在Java 8中

   String startDate1="2017-03-23";
   DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd");
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何获取与上述正确输出相同的sql date类型的日期。

gre*_*449 5

java.sql.Date有一个valueOf采用Java 8 的静态方法,LocalDate因此您可以执行以下操作:

String startDate1 = "2017-03-23";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd");

LocalDate date = LocalDate.parse(startDate1, formatter);

java.sql.Date sqlDate = java.sql.Date.valueOf(date);
Run Code Online (Sandbox Code Playgroud)

  • 因为“ u”在“ SimpleDateFormat”中表示“星期几”。它只在`DateTimeFormatter`中表示年份 (2认同)
  • @ greg-449不需要该格式模式。该模式由ISO 8601标准定义,并且在解析和生成字符串时,默认情况下java.time使用标准格式。`LocalDate.parse(“ 2017-03-23”)`您甚至可以将其组合在一起:`java.sql.Date.valueOf(LocalDate.parse(“ 2017-03-23”))` (2认同)