在 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));
使用下面的代码
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
方法,以便传输到数据库。
请注意,我们从未使用过更多的字符串。我们从原始输入 String
到 java.time.Date
再到 java.sql.Date
。
我们从未使用过 java.util.Date
。检查您的 import
语句以消除 java.util.Date
.
顺便说一下,从 java.sql.Date
到 LocalDate
的另一个方向:
LocalDate localDate = mySqlDate.toLocalDate();
我在将字符串转换为日期格式时遇到问题。
这是我试过的-
第一次尝试:
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));
使用下面的代码
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
方法,以便传输到数据库。
请注意,我们从未使用过更多的字符串。我们从原始输入 String
到 java.time.Date
再到 java.sql.Date
。
我们从未使用过 java.util.Date
。检查您的 import
语句以消除 java.util.Date
.
顺便说一下,从 java.sql.Date
到 LocalDate
的另一个方向:
LocalDate localDate = mySqlDate.toLocalDate();