【问题标题】:How to convert a non-formatted string to date time object in Java? [duplicate]如何在 Java 中将非格式化字符串转换为日期时间对象? [复制]
【发布时间】:2018-04-10 21:59:39
【问题描述】:

我们的一堆 sql 迁移文件以约定“V201801011200__migration.sql”命名,我被分配编写一个 java 方法来选择最新的迁移。我想通过将“201801011200”解析为 Java 日期时间(或其他类似对象,如果日期时间不支持此字符串的格式)来实现。

我该怎么做呢?请注意,我无法将这些迁移文件重命名为“2018-01-01-12:00”等。

【问题讨论】:

  • 没有破折号或冒号并不意味着它们没有被格式化。它们只是没有破折号或冒号的格式。
  • 也就是说,假设它们都以相同的方式编号。
  • 为什么需要解析日期才能找到最新的?在给定的格式 (yyyyMMddHHmm) 中,文本本身的顺序与日期相同,即较晚的日期是较晚的字母文本。所以只需找到最后一个字母文件名的文件。解析日期是多余的。
  • 除了对文件名进行排序之外,还有几个选项:(1) 使用DateTimeFormatter.ofPattern("'V'uuuuMMddHHmm__'migration.sql'") 解析为LocalDateTime。 (2) 使用正则表达式从文件名中挑选出日期时间,然后使用不包括Vmigration.sql的日期时间格式化程序进行解析。

标签: java parsing datetime


【解决方案1】:

一个简单的字符串到时间是:

String timeString="201801011200";
SimpleDateFormat timeStringFormat = new SimpleDateFormat( "yyyyMMddHHmm" ) ;
Date time = timeStringFormat.parse(timeString);
System.out.println(time) ;

【讨论】:

  • 请不要教年轻人使用SimpleDateFormat。那门课不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 和它的DateTimeFormatter 类中做得更好。
  • 并不是所有人都在使用 Java 8 或最新技术 :)
  • 真的,@Marvin。对于 Java 6 和 7,使用ThreeTen Backport,它提供了java.time 功能。如果你想传达一个 Java 5 解决方案,很好,但请告诉我们它就是这样,所以没有人会误以为这是他们应该与更现代的 Java 版本一起使用的解决方案。请。
【解决方案2】:
If you need java Date object use SimpleDateFormat:

SimpleDateFormat inputFormat = new SimpleDateFormat("yyyyMMddHHmm");
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd-HH:mm");
java.util.Date javaDate = inputFormat.parse("201801011200");
System.out.println("java.util.Date=" + javaDate);
System.out.println("output string=" + outputFormat.format(javaDate));

如果您只需要重新格式化字符串,请使用 StringBuilder

String outputString = new StringBuilder("201801011200").
                insert(4, "-").
                  insert(7, "-").
                    insert(10, "-").
                      insert(13, ":").toString();
System.out.println("output string=" +outputString);

【讨论】:

  • 请不要教年轻人使用SimpleDateFormat。那门课不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 和它的DateTimeFormatter 类中做得更好。
  • 如果您知道 java.util.Date 是什么以及如何正确使用它,它仍然可以很好地工作。那么……你的答案在哪里?
  • 有很好的java.time 答案,例如herehere
猜你喜欢
  • 2016-07-04
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2016-03-08
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多