Java String to Date对象格式为“yyyy-mm-dd HH:mm:ss”

我需要将包含日期的String转换为日期对象。 字符串的格式为“yyyy-mm-dd HH:mm:ss.SSSSSS”,我想在日期对象中使用相同的格式。

例如,我有一个字符串“2012-07-10 14:58:00.000000”,我需要生成的日期对象具有相同的格式。

我已经尝试了以下方法,但结果并不像预期的那样。

java.util.Date temp = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss.SSSSSS").parse("2012-07-10 14:58:00.000000"); DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss"); Date thisDate = dateFormat.parse("2012-07-10 14:58:00.000000"); 

结果是“Tue Jan 10 14:58:00 EST 2012”。 请让我知道我哪里出错了。

谢谢,Yeshwanth Kota

 java.util.Date temp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").parse("2012-07-10 14:58:00.000000"); 

mm是你想要MM分钟

 public class Test { public static void main(String[] args) throws ParseException { java.util.Date temp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS") .parse("2012-07-10 14:58:00.000000"); System.out.println(temp); } } 

打印:

Tue Jul 10 14:58:00 EDT 2012

备查:

  yyyy => 4 digit year MM => 2 digit month (you must type MM in ALL CAPS) dd => 2 digit "day of the month" HH => 2-digit "hour in day" (0 to 23) mm => 2-digit minute (you must type mm in lowercase) ss => 2-digit seconds SSS => milliseconds 

所以“yyyy-MM-dd HH:mm:ss”返回“2018-01-05 09:49:32”

但“MMM dd,yyyy hh:mm a”返回“2018年1月5日上午09:49”

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html上的所谓示例仅显示输出。 他们不告诉你使用什么格式!

你没有申请日期格式或。 而你只是解析日期。 以这种格式获得输出

 yyyy-MM-dd HH:mm:ss.SSSSSS 

我们必须使用format()方法这里是完整的例子: – 这是完整的例子: – 它将采用这种格式的日期yyyy-MM-dd HH:mm:ss.SSSSSS ,结果我们将获得与此相同的输出格式yyyy-MM-dd HH:mm:ss.SSSSSS

  import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; //TODO OutPut should LIKE in this format yyyy-MM-dd HH:mm:ss.SSSSSS. public class TestDateExample { public static void main(String args[]) throws ParseException { SimpleDateFormat changeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS"); java.util.Date temp = changeFormat.parse("2012-07-10 14:58:00.000000"); Date thisDate = changeFormat.parse("2012-07-10 14:58:00.000000"); System.out.println(thisDate); System.out.println("----------------------------"); System.out.println("After applying formating :"); String strDateOutput = changeFormat.format(temp); System.out.println(strDateOutput); } } 

工作示例屏幕

TL;博士

 LocalDateTime.parse( "2012-07-10 14:58:00.000000".replace( " " , "T" ) ) 

微秒不适合

您试图将具有微秒(六位十进制数字)的值压缩为仅具有毫秒分辨率(三位十进制数字)的数据类型。 那是不可能的。

而是使用具有足够精细分辨率的数据类型。 java.time类使用纳秒分辨率(九位十进制数字)。

未分区输入不适合分区类型

您试图将缺少任何从UTC或时区偏移的值放入仅表示UTC值的数据类型( Date )中。 因此,您要添加输入不打算的信息(UTC偏移)。

请改用适当的数据类型。 具体来说, java.time.LocalDateTime

区分大小写

其他答案和注释正确地解释了格式化模式代码区分大小写。 所以MMmm有不同的效果。

避免遗留类

与最早版本的Java捆绑在一起的麻烦的旧日期时间类现在已经遗留下来,取而代之的是Java 8及更高版本中内置的java.time类。

ISO 8601

您的输入字符串几乎符合ISO 8601标准格式。 用T替换中间的SPACE以完全符合。

解析/生成字符串时,java.time类在默认情况下使用标准格式。 因此无需指定格式化模式。

日期时间对象没有“格式”

我需要生成的日期对象具有相同的格式。

不,日期时间对象没有“格式”。 不要将日期时间对象与纯粹的字符串混淆。 字符串是对象的输入和输出。 对象保持自己的日期时间信息的内部表示,其细节与我们作为调用程序员无关。

java.time

您的输入缺少任何偏离UTC或麻烦的区域指示。 所以我们解析为缺少这些概念的LocalDateTime对象。

 String input = "2012-07-10 14:58:00.000000".replace( " " , "T" ) ; LocalDateTime ldt = LocalDateTime.parse( input ) ; 

生成字符串

要生成表示LocalDateTime值的String:

  • 调用toString以获取标准ISO 8601格式的String。
  • 使用DateTimeFormatter以自定义格式或自动本地化格式生成字符串。

搜索Stack Overflow获取更多信息,因为这些主题已经涵盖了很多次。

ZonedDateTime

LocalDateTime不代表时间轴上的确切点。

要确定实际时刻,请指定时区。 例如,印度加尔各答的中午比法国巴黎的中午早得多。 没有时区的中午可能会在大约26-27小时的任何时间点发生。

 ZoneId z = ZoneId.of( "Asia/Kolkata" ) ; ZonedDateTime zdt = ldt.atZone( z ) ; 

关于java.time

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

现在处于维护模式的Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310 。

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

从哪里获取java.time类?

  • Java SE 8Java SE 9及更高版本
    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小function和修复。
  • Java SE 6Java SE 7
    • 许多java.timefunction都被反向移植到ThreeTen-Backport中的 Java 6和7。
  • Android的
    • 更高版本的Android捆绑java.time类的实现。
    • 对于早期的Android, ThreeTenABP项目采用ThreeTen-Backport (如上所述)。 请参见如何使用ThreeTenABP ….

ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的课程,如IntervalYearWeekYearQuarter等。