9

我有字符串11/08/2013 08:48:10

我用SimpleDateFormat("MM/dd/yyyy HH:mm:ss")

当我解析它时会抛出一个异常:无法解析的日期

它出什么问题了 ?

            String result = han.ExecuteUrl("http://"+han.IP+":8015/api/Values/GetLastChange"); 
            Log.d("Dal","result date time "+result); #result is 11/08/2013 08:48:10
            SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

            Date convertedDate = new Date();
            try
            {

                convertedDate = dateFormat.parse(result);
            }
            catch (ParseException e)
            {
                e.printStackTrace();
            }
4

3 回答 3

30

它的工作尝试像这样解析你的日期..

String dtStart = "11/08/2013 08:48:10";
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
try {
    date = format.parse(dtStart);
    System.out.println("Date ->" + date);
} catch (ParseException e) {
    e.printStackTrace();
}
于 2013-11-09T08:18:37.217 回答
4

工作代码在这里。

您可以使用以下代码将字符串转换为日期

String myStrDate = "11/08/2013 08:48:10";
    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    try {
        Date date = format.parse(myStrDate);
        System.out.println(date);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

对于反向,这意味着从日期转换为字符串

SimpleDateFormat myFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    try {
        Date date = new Date();
        String datetime = myFormat.format(date);
        System.out.println("Current Date Time in give format: " + datetime);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

有关日期和时间格式的更多参考。访问开发者网站

于 2016-04-06T07:53:09.090 回答
1

java.time 和 ThreeTenABP

这不是您要求的答案,但应该是其他读者在 2020 年及以后想要的答案。

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/uuuu HH:mm:ss");
    String result = "11/08/2013 08:48:10"; 
    LocalDateTime dateTime = LocalDateTime.parse(result, formatter);
    System.out.println("Parsed date and time: " + dateTime);

此片段的输出是:

解析日期和时间:2013-11-08T08:48:10

您使用的Date类设计不佳且已过时,因此请不要再使用它。相反,我使用的是现代 Java 日期和时间 API java.time。如果您需要一个Date您现在无法升级的旧版 API,则转换为:

    Instant i = dateTime.atZone(ZoneId.systemDefault()).toInstant();
    Date oldfashionedDate = DateTimeUtils.toDate(i);

    System.out.println("Converted to old-fashioned Date: " + oldfashionedDate);

转换为老式日期:Fri Nov 08 08:48:10 CET 2013

你的代码出了什么问题?

它出什么问题了 ?

你的代码唯一的问题是你使用了臭名昭著的麻烦SimpleDateFOrmat和设计糟糕的Date类。当您在 2013 年提出这个问题时,这并没有错。 java.time 直到 4 个月后才问世。

您的代码运行良好。有人可能会推测字符串中的前导空格等阻止了解析。如果这是问题所在,请尝试解析result.trim()而不是仅仅result因为trim()返回一个删除了前导和尾随空格的字符串。

问题:java.time 不需要 Android API 级别 26 吗?

java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6

  • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。只有在这种情况下,转换为Date更简单一些:Date.from(i).
  • 在非 Android Java 6 和 7 中获得 ThreeTen Backport,现代类的后向端口(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从org.threeten.bp子包中导入日期和时间类。

链接

于 2020-01-17T04:16:11.303 回答