从Android API级别19的date.getTime()获得毫秒

我需要获取格式的日期时间字符串

"yyyy-MM-dd'T'HH:mm:ss.SSSZ"

其中SSS是毫秒数(从000到999)。

我编写了以下代码段:

Date date=Calendar.getInstance().getTime();
String currentDateTimeString = (String) android.text.format.DateFormat.
       format("yyyy-MM-dd'T'HH:mm:ss.SSSZ",Calendar.getInstance().getTime());

但是我得到像这样的字符串

“ 2019-11-08T13:39:33.SSSZ”

由于此答案中所述的某些问题

https://stackoverflow.com/a/58768066/930835

由于提供的信息,该答案已被接受。该建议不适用于我的情况。

实际上我的应用程序必须与Android API 19级兼容。

通过此问题询问要评估的特定代码段的方式。

这是一个独立的代码段。因此,这是一个不同的问题,它本身很有用。

所以我尝试了这段代码

Date date=Calendar.getInstance().getTime();
    String currentDateTimeString = (String) android.text.format.DateFormat.
           format("yyyy-MM-dd'T'HH:mm:ss",date);
    long ms=date.getTime() %1000;
    currentDateTimeString=currentDateTimeString+"."+String.valueOf(ms)+"Z";

但是我不知道它是否可靠,也就是说,它是否可以正确计算出该Date瞬间的毫秒数。

NOKIA3650 回答:从Android API级别19的date.getTime()获得毫秒

java.time和ThreeTenABP

对于Android API级别19,建议您通过backport ThreeTenABP使用java.time。

简易版本:

    String currentDateTimeString = Instant.now().toString();
    System.out.println(currentDateTimeString);

现在运行时的输出:

  

2019-11-08T21:43:31.893Z

如果milliseoncds恰好为0(在一种情况下,预计为1000),则不会打印出来。请检查这是否对您有问题。减去毫秒符合ISO 8601标准,因此应该可以,但是请进行检查以防万一。如果您确实始终需要毫秒,请使用格式化程序:

    DateTimeFormatter formatter
            = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX");
    String currentDateTimeString
            = OffsetDateTime.now(ZoneOffset.UTC).format(formatter);
  

2019-11-08T21:48:10.262Z

问题中的代码是否可靠?

  

但是我不知道它是否可靠,也就是说,它是否可以计算出   该日期的毫秒数可以立即正确显示。

不,您的代码不太可靠。两点:

  1. 如果毫秒数少​​于100,则将以少于3位数字打印。 58.012秒将被错误地打印为58.12秒。我同意您的意见,认为可以找到解决该问题的方法。
  2. 更糟糕的是,但与毫秒无关:您的代码在JVM的默认时区(可能是设备时区设置)中显示日期和时间,但是附加了Z,因此声称时间是在UTC中不是这样(除非将特定设备设置为UTC,但即使已设置为UTC,也不应总是这样)。我对android.text.format.DateFormat不太了解,无法判断它是否可以解决此问题。

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

java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在非Android Java 6和7中,获得ThreeTen Backport,这是现代类的backport(ThreeTen for JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

链接

本文链接:https://www.f2er.com/3136787.html

大家都在问