我有以下输入String
"30-JUL-21"
作为日期,我想转换为Instant
。
但是我找不到正确的解决方案...你有主意吗?
我已经尝试过
SimpleDateFormat sdfmt2 = new SimpleDateFormat("dd-MMM-yy");
result = sdfmt2.parse(source).toInstant();
但是它不能正常工作。
我的代码:
String src = "30-JUL-21";
Instant result = null;
if (!StringUtils.isEmpty(src)) {
try {
SimpleDateFormat sdfmt2= new SimpleDateFormat("dd-MMM-yy");
result = sdfmt2.parse(src).toInstant();
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
答案 0 :(得分:3)
您可以构建一个registers.af
来不区分大小写地解析,并使用英语DateTimeFormatter
和匹配的模式,因为您对月份的表示不能仅通过模式来解析。
请参见以下示例,其中每个步骤均已明确完成,并且UTC用作时区。或者,您可以通过将Locale
替换为ZoneId.of("UTC")
来使用系统的时区,当然,如果系统的时区不是UTC,则这将影响输出。因为我不知道您的时区(对吗?),所以我在这里选择UTC来获得可比的输出:
ZoneId.systemDefault()
它的输出是这样(最后打印使用结果public static void main(String[] args) {
// example input
String source = "30-JUL-21";
// create a formatter that parses case-insensitively using a matching pattern
DateTimeFormatter caseInsensitiveDtf = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("dd-MMM-uu")
.toFormatter(Locale.ENGLISH);
// parse the String using the previously defined formatter
LocalDate localDate = LocalDate.parse(source, caseInsensitiveDtf);
// print this intermediate result
System.out.println(localDate);
// build up a datetime by taking the start of the day and adding a time zone
ZonedDateTime zdt = localDate.atStartOfDay(ZoneId.of("UTC"));
// print that intermediate result, too
System.out.println(zdt);
// then simply convert it to an Instant
Instant instant = zdt.toInstant();
// and print the epoch millis of it
System.out.println(instant.toEpochMilli());
}
):
Instant