【发布时间】: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) 使用正则表达式从文件名中挑选出日期时间,然后使用不包括V和migration.sql的日期时间格式化程序进行解析。