7

在我的应用程序中,我可以选择暂停执行一段时间。我想显示执行将恢复的时间,包括秒数,并且我希望根据系统设置格式化时间字符串。这是我想出的代码:

long millis = getResumeTime();
String timeString;
timeString = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM).format(millis);

这确实会生成一个带秒数的格式化字符串,但它会返回 AM/PM 格式的时间,即使我在设置中设置了 24 小时时间格式。更有趣的是,系统托盘中的时间已使用 24 小时格式正确格式化。

我尝试像这样使用 DateFormat.getTimeFormat:

long millis = getResumeTime();
String timeString;
java.text.DateFormat df = android.text.format.DateFormat.getTimeFormat(this);
timeString = df.format(millis);

但是生成的字符串不包含秒数,而且我看不到包含它们的方法。

我在 Android 4.2 模拟器上运行此代码。我在这里错过了什么吗?SimpleDateFormat 是否不知道 12/24 小时设置?如果不是,我如何获得系统格式的时间字符串表示(包括小时、分钟和秒)?

4

5 回答 5

6

更简单的解决方案是:

String timeString = DateUtils.formatDateTime(getContext(), timeInMillis,
           DateUtils.FORMAT_SHOW_TIME);

这可以正确处理 12/24 小时用户设置。

于 2014-09-27T14:25:46.743 回答
5

Android 5 到 6.0.1 中似乎存在一个错误,其中DateFormat#getTimeInstance(int)返回DateFormat忽略使用 24 小时格式设置的错误。其他答案提到了此错误的各种解决方法。您可以在https://code.google.com/p/android/issues/detail?id=181201上关注该问题。

于 2016-08-25T08:47:56.857 回答
2

这很可能取决于您的系统所在的语言环境。如果您的系统在美国,它将默认为 12 小时而不是 24 小时。IE

long millis = new Date().getTime();
String uk = SimpleDateFormat
               .getTimeInstance(SimpleDateFormat.MEDIUM, Locale.UK)
               .format(millis);
String us = SimpleDateFormat
               .getTimeInstance(SimpleDateFormat.MEDIUM, Locale.US)
               .format(millis);
System.out.println("UK: " + uk);
System.out.println("US: " + us);

会给你

UK: 16:19:49
US: 4:19:49 PM

因此,也许您可​​以获取系统区域设置并在格式化程序中指定它。

但是,如果您总是希望它采用 24 小时格式,那么我建议您在格式化程序中明确指定它。

更新:由于您想根据设备规范获取时间格式,您可以使用系统的Time_12_24值并根据结果值确定您的格式。

于 2013-04-13T02:23:15.373 回答
0
String timestamp = (DateFormat.format("yyyy.MM.dd kk:mm:ss", new Date())).toString();

用 kk 代替 hh。

于 2013-05-19T14:25:42.463 回答
0

您可能应该创建自己的格式模式。如果我没记错的话,您使用的模式是“HH:mm:ss.SSS”,它可以为您提供小时、分钟、秒和小数秒的三位精度。

请参阅 SimpleDateFormat 的 API 参考文档。

于 2013-04-13T00:16:09.510 回答