在 JAVA 中将字符串转换为日期格式 (yyyy/MM/dd)

Converting string to date format (yyyy/MM/dd) in JAVA

我在将字符串转换为日期格式时遇到问题。

这是我试过的-

第一次尝试:

        String completionDate1 = request.getParameter("completion_date");
        System.out.println(completionDate1); // O/P --> 21/10/2016 (Correct)
        DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
        Date date = new Date();
        date = df.parse(completionDate1);
        System.out.println(date); // O/P --> Tue Apr 08 00:00:00 IST 27 (Inorrect)

第二次尝试:

        String completionDate1 = request.getParameter("completion_date");
        System.out.println(completionDate1); // O/P --> 21/10/2016 (Correct)
        Date completionDate = new SimpleDateFormat("yyyy/MM/dd").parse(completionDate1);
        System.out.println(completionDate); // O/P --> Tue Apr 08 00:00:00 IST 27 (Inorrect)

我期望的输出是 completionDate 应该是 Date 格式而不是 String。我只是打印 completionDate 以确保日期格式得到转换。

以日期格式获取它的主要目的是我需要它用于更新查询,因此它必须是日期而不是字符串。

请让我知道哪里出错了。我需要这种日期格式,因为我需要将这个日期存储在数据库中。

谢谢

你可以试试这个

DateFormat df = new SimpleDateFormat("yyyy/mm/dd");
String completionDate = df.format(request.getParameter("completion_date"));
System.out.println(completionDate);

你必须在解析后格式化日期,但你的解析格式也不正确,所以它给出了错误的输出。尝试

 String completionDate1 = "21/10/2016";
 System.out.println(completionDate1);
 DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
 Date date = new Date();
 date = df.parse(completionDate1);
 DateFormat df1 = new SimpleDateFormat("yyyy/MM/dd");
 System.out.println(df1.format(date));

DEMO

使用下面的代码

 String completionDate1 = request.getParameter("completion_date");
 System.out.println(completionDate1); // O/P --> 21/10/2016 (Correct)
 Date completionDate = new SimpleDateFormat("dd/MM/yyyy").parse(completionDate1);

 String date = new SimpleDateFormat("yyyy/MM/dd").format(completionDate);
 System.out.println(date);

模式错误

第一个问题是您定义的解析模式与您的输入字符串不匹配。对于 21/10/2016 模式应该是 dd/MM/yyyy.

java.sql.Date 与 java.util.Date

第二个问题是,对于数据库访问,您应该使用 java.sql.Date class for a date-only value without time-of-day and without time zone. Not to be confused with java.util.Date,它是日期 时间值。您应该在像这个问题这样的讨论中指定完全限定的 class 名称。

这些 class 都没有“格式”。他们有自己的内部代表,来自 epoch 的计数。

java.time

第三个问题是您使用的是过时的 classes。在 Java 8 及更高版本中,使用 java.time framework now built-in. In Java 6 & 7, use its back-port, the ThreeTen-Backport 项目。对于 Android,使用那个后端口的适配,ThreeTenABP。

在 java.time classes 中,我们现在有 LocalDate class 用于仅日期值。

String input = "21/10/2016"
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy" );
LocalDate localDate = LocalDate.parse( input , formatter );

希望有一天 JDBC 驱动程序将更新为直接使用 java.time 类型。在那之前,使用添加到旧 java.sql 类型的新方法进行转换。

java.sql.Date sqlDate = java.sql.Date.valueOf( localDate );

现在将 java.sql.Date 对象传递给 PreparedStatement 对象上的 setDate 方法,以便传输到数据库。

请注意,我们从未使用过更多的字符串。我们从原始输入 Stringjava.time.Date 再到 java.sql.Date

我们从未使用过 java.util.Date。检查您的 import 语句以消除 java.util.Date.

顺便说一下,从 java.sql.DateLocalDate 的另一个方向:

LocalDate localDate = mySqlDate.toLocalDate();