繁体   English   中英

我尝试在 java 中将字符串转换为日期格式,但有一个例外

[英]I try to convert a String to Date format in java but has an exception

我尝试将String转换为Date格式,但出现异常!

这是我的代码:

SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy");
startDate = format.parse(startDateString);

它应该将"14-MAY-2004"转换为Date 谢谢。

java.time

我建议您使用 java.time,现代 Java 日期和时间 API 进行日期工作。

    DateTimeFormatter dateFormatter = new DateTimeFormatterBuilder()
            .parseCaseInsensitive()
            .appendPattern("d-MMM-uuuu")
            .toFormatter(Locale.ENGLISH);

    String startDateString = "14-MAY-2004";
    LocalDate startDate = LocalDate.parse(startDateString, dateFormatter);

    System.out.println(startDate);

Output 是:

2004-05-14

仅当您对于尚未升级到 java.time 的旧版 API 必不可少时需要Date object 时,转换:

    Instant startOfDay = startDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
    Date oldfashionedDate = Date.from(startOfDay);

    System.out.println(oldfashionedDate);

Output 在我的时区:

2004 年 5 月 14 日星期五 00:00:00 CEST

你的代码出了什么问题?

这几乎可以肯定是一个语言环境问题。 您没有指定语言环境,因此没有指定月份名称或缩写的语言。 当日期字符串包含某种语言的文本时,请始终这样做。 您的SimpleDateFormat使用的是 JVM 的默认格式设置区域设置,如果那是非英语区域设置,则解析被视为失败,并出现您提到的异常。

链接

从声明“它应该将 14-MAY-2004 转换为日期”我假设您的输入字符串是 14-MAY-2004 并且您希望将此字符串转换为日期

String js="14-May-2004";
        Date dt=new Date(js);
        LocalDateTime localDateTime=dt.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        localDateTime.format(DateTimeFormatter.ofPattern("dd-MM-yyyy"));//or in the same format use- "dd-MMM-yyyy"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM