Jam*_*rey 10 java date java-time
尝试了4个小时来解决这个问题.
:这很有效
String date = "Jul-01-2014 09:10:12";
LocalDateTime dt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("MMM-dd-yyyy HH:mm:ss", Locale.US));
Run Code Online (Sandbox Code Playgroud)
:这不会
String date = "JUL-01-2014 09:10:12";
LocalDateTime dt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("MMM-dd-yyyy HH:mm:ss", Locale.US));
Run Code Online (Sandbox Code Playgroud)
唯一的区别是所有资本化的月份.七月的正确案例.JUL或jul都不会起作用.我也试过'LLL'模式没有运气.我错过了什么?
Jam*_*rey 11
显然,我需要花5个小时才能做到这一点.在编写扩展程序以提供解决方法时,我发现了这一点.
String date = "01-JUL-2014 09:10:12";
DateTimeFormatterBuilder fmb = new DateTimeFormatterBuilder();
fmb.parseCaseInsensitive();
fmb.append(DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm:ss"));
LocalDateTime dt = LocalDateTime.parse(date, fmb.toFormatter());
Run Code Online (Sandbox Code Playgroud)
适用于所有案例样式.
官方API好像不支持。
Run Code Online (Sandbox Code Playgroud)Symbol Meaning Presentation Examples ------ ------- ------------ ------- G era text AD; Anno Domini; A u year year 2004; 04 y year-of-era year 2004; 04 D day-of-year number 189 M/L month-of-year number/text 7; 07; Jul; July; J d day-of-month number 10
月份的唯一选项是存在的,并且它没有明确提及支持三个大写字母月份的任何格式。
不过,将其转换回 Java 可以接受的格式并不是非常困难;不过,它涉及到一点点欺骗日期并将其放回单个字符串中。
下面的解决方案并不像使用第三方那样优雅或干净,但额外的好处是人们根本不必依赖第三方库来获取此代码。
public String transformToNormalizedDateFormat(final String input) {
String[] components = input.split("-");
String month = components[0];
if(month.length() > 3) {
throw new IllegalArgumentException("Was not a date in \"MMM\" format: " + month);
}
// Only capitalize the first letter.
final StringBuilder builder = new StringBuilder();
builder.append(month.substring(0, 1).toUpperCase())
.append(month.substring(1).toLowerCase())
.append("-");
final StringJoiner stringJoiner = new StringJoiner("-");
Arrays.stream(components, 1, components.length).forEach(stringJoiner::add);
builder.append(stringJoiner.toString());
return builder.toString();
}
Run Code Online (Sandbox Code Playgroud)