【问题标题】:Kotlin - Unparseable dateKotlin - 无法解析的日期
【发布时间】:2020-10-12 19:44:55
【问题描述】:

当我尝试解析我的日期时出现此错误

原因:java.text.ParseException:无法解析的日期

我要解析的内容

“2020-09-23T13:45:13.371Z”

这是我的代码

    val formatter = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault())
    val mDate = formatter.parse(dateString)

    val date = SimpleDateFormat("EEEE, MMMM d, yyyy", Locale.getDefault())
    date.timeZone = TimeZone.getTimeZone("UTC")
    return (date.format(mDate))

谁能指出正确的方向来解析这个日期字符串?

最好的尊重,

【问题讨论】:

  • 您的代码对我来说很好用。尝试使用Locale.ENGLISH 作为格式化程序,它可能会有所作为。
  • 感谢您的回复,我再次检查了我的代码,但忘记将旧格式“yyyy-MM-dd'T'HH:mm:ss'Z'”更改为“yyyy- MM-dd'T'HH:mm:ss.SSS'Z'" (提供的代码是以格式为参数的函数。再次感谢和抱歉!

标签: android date kotlin


【解决方案1】:

java.util 日期时间类已过时且容易出错,它们的格式化 API SimpleDateFormat 也是如此。我建议你应该完全停止使用它们并切换到modern date-time API

如果您正在为您的 Android 项目执行此操作,并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

通过 Trail: Date Time 了解有关现代日期时间 API 的更多信息。

使用现代日期时间 API:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        System.out.println(formatDateStr("2020-09-23T13:45:13.371Z"));
    }

    static String formatDateStr(String strDate) {
        return OffsetDateTime.parse(strDate).format(DateTimeFormatter.ofPattern("EEEE, MMMM d, uuuu", Locale.ENGLISH));
    }
}

输出:

Wednesday, September 23, 2020

使用旧版 API:

请注意,日期时间中的Z 代表Zulu 时间(0 小时偏移),因此请确保将时区设置为UTC

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.TimeZone;

public class Main {
    public static void main(String[] args) throws ParseException {
        System.out.println(formatDateStr("2020-09-23T13:45:13.371Z"));
    }

    static String formatDateStr(String strDate) throws ParseException {
        DateFormat inputFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        inputFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));

        DateFormat outputFormatter = new SimpleDateFormat("EEEE, MMMM d, yyyy", Locale.ENGLISH);

        return outputFormatter.format(inputFormatter.parse(strDate));
    }
}

输出:

Wednesday, September 23, 2020

【讨论】:

    【解决方案2】:

    您可以使用本机 SimpleDateFromat 来解析此类日期。 例如:

    String yourTime = "2020-09-23T13:45:13.371Z";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault());
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
        try {
            calendar.setTime(sdf.parse(yourTime));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        SimpleDateFormat output = new SimpleDateFormat("HH:mm", Locale.getDefault());
        System.out.println(output.format(calendar.getTime()));
    

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      相关资源
      最近更新 更多