gpt4 book ai didi

Java英文日期格式解析

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:02 24 4
gpt4 key购买 nike

我的问题如下。我正在读取一个文件,它包含一堆 CSV 行。每行包含一些格式为 22-mar-2010 或类似格式的日期,即格式为 dd-MMM-yyyy。我想将其转换为 ISO 格式,使其变为 2010-03-22

我的代码是这样的:

  private String convertDate(String date) {
DateTimeFormatter oldFormat = DateTimeFormatter.ofPattern("dd-MMM-yyyy", new Locale("en"));
LocalDate parsedDate = LocalDate.parse(date, oldFormat);

DateTimeFormatter newFormat = DateTimeFormatter.ISO_DATE;
String newDate = parsedDate.format(newFormat);
return newDate;
}

输入看起来像这样:

sdfdsfslk 28-mar-2007 dfdsljs
sdfdsfslk 20-apr-2014 dfdsljs
sdfdsfslk 13-oct-2005 dfdsljs
sdfdsfslk 20-may-2014 dfdsljs
sdfdsfslk 20-jan-2014 dfdsljs
sdfdsfslk 20-feb-2014 dfdsljs

如果像上面那样包含语言环境或使用 withLocale(Locale.ENGLISH) 那么它会在第一行日期字符串处失败。异常(exception)情况是:

java.time.format.DateTimeParseException: Text '28-mar-2007' could not be parsed at index 3

如果我删除语言环境部分并且只有:

DateTimeFormatter.ofPattern("dd-MMM-yyyy");

然后它会一直工作,直到遇到诸如 13-oct-2005 之类的日期。它不喜欢英文 'oct' 并且在 LocalDate.parse 行失败。如果我将 oct 转换为 okt(瑞典语,我所在的地方),那么它会解析它。

我是否需要完全更改我的区域设置或者这里出了什么问题?即使我在瑞典,如何让它以英语解析带月份的日期?

最佳答案

我认为问题在于月份的第一个字母是小写。当您为 28-Mar-2007 而不是 28-mar-2007 运行相同的代码时,一切正常。

一个快速而肮脏的解决方案是:

private String convertDate(String mydate) {

String date = mydate;
String firstLetter = date.substring(0,4).toUpperCase();
String restLetters = date.substring(4).toLowerCase();
date = firstLetter+restLetters;

DateTimeFormatter oldFormat = DateTimeFormatter.ofPattern("dd-MMM-yyyy", new Locale("en"));
LocalDate parsedDate = LocalDate.parse(date, oldFormat);

DateTimeFormatter newFormat = DateTimeFormatter.ISO_DATE;
String newDate = parsedDate.format(newFormat);
return newDate;
}

关于Java英文日期格式解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39211077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com