【问题标题】:Parse String date in (yyyy-MM-dd) format以 (yyyy-MM-dd) 格式解析字符串日期
【发布时间】:2013-09-18 13:02:43
【问题描述】:

我有一个格式为“2013-09-18”的字符串。我想把它转换成 java.util.Date。 我正在这样做

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date convertedCurrentDate = sdf.parse(currentDateText);

convertedCurrentDate 为“Wed Sep 18 00:00:00 IST 2013”​​

我希望我的输出格式为“2013-09-18”

小时、分钟和秒不应该出现,它应该是 yyyy-MM-dd 的形式。

【问题讨论】:

  • parse 用于将String 转换为Date。反之,请使用format

标签: java date parsing


【解决方案1】:

你可能需要format输出如下。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date convertedCurrentDate = sdf.parse("2013-09-18");
String date=sdf.format(convertedCurrentDate );
System.out.println(date);

使用

String convertedCurrentDate =sdf.format(sdf.parse("2013-09-18"));

输出:

2013-09-18

【讨论】:

  • 您好,我怎样才能获得返回类型为 Date(java.util.Date) 的 (yyyy-MM-dd) 格式的 java.util.Date?
  • 你不能。 Date 没有也不能有格式。
  • 默认情况下,解析是宽松的。如果您需要禁用它,请致电setLenient(false) - docs.oracle.com/javase/7/docs/api/java/text/…
  • 我知道它不相关,但以防万一您想将其转换为 java.sql.Date 而不是 java.util.Date,stackoverflow.com/a/18439059/1572286有一个更简单的方法>
【解决方案2】:

tl;博士

LocalDate.parse( "2013-09-18" )

……和……

myLocalDate.toString()  // Example: 2013-09-18

java.time

问题和其他答案已过时。麻烦的旧的旧日期时间类现在被 java.time 类所取代。

ISO 8601

您的输入字符串恰好符合标准ISO 8601 格式,YYYY-MM-DD。 java.time 类在解析和生成日期时间值的字符串表示时默认使用 ISO 8601 格式。所以不需要指定格式模式。

LocalDate

LocalDate 类表示没有时间和时区的仅日期值。

LocalDate ld = LocalDate.parse( "2013-09-18" );

关于java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。

从哪里获得 java.time 类?

ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

【讨论】:

  • 展示一些 .parse() 选项的示例可能是值得的,这是原始问题的主题。
  • @jakeblues 感谢您的推动。修改答案以专注于解析仅日期值。
【解决方案3】:

您正在创建一个 Date 对象,它表示时间轴中的某个点。这意味着它将具有正确表示它所需的所有部分,包括分钟和秒等。因为你从一个只包含部分日期的字符串初始化它,所以丢失的数据将被默认。

我假设您正在“打印”这个 Date 对象,但没有像解析它时那样实际指定格式。使用相同的 SimpleDateFormat,但按照 Holger 的建议调用相反的方法 format(Date)

【讨论】:

  • +1 这是该问题的唯一正确答案,因为无论您如何打印,OP 似乎都缺少对 Date 是日期的基本理解。
【解决方案4】:
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
String cunvertCurrentDate="06/09/2015";
Date date = new Date();
date = df.parse(cunvertCurrentDate);

【讨论】:

  • 添加说明此代码的作用以及解决问题的原因。
  • 它没有回答问题,也没有解决问题(至少不正确/完全)
【解决方案5】:

我将字符串转换为日期格式(“yyyy-MM-dd”)保存到Mysql数据库中。

 String date ="2016-05-01";
 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
 Date parsed = format.parse(date);
 java.sql.Date sql = new java.sql.Date(parsed.getTime());

sql 这是我的日期格式输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2018-07-31
    • 2016-01-02
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多