Ant*_*hyn 6 java time android time-format
在我的应用程序中,我可以选择暂停执行一段时间.我想显示执行将恢复的时间,包括秒,我希望时间字符串根据设置进行格式化.这是我提出的代码:
long millis = getResumeTime();
String timeString;
timeString = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM).format(millis);
Run Code Online (Sandbox Code Playgroud)
这确实产生了一个带有秒的格式化字符串,但它返回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);
Run Code Online (Sandbox Code Playgroud)
但结果字符串不包含秒,我没有看到包含它们的方法.
我在Android 4.2模拟器上运行此代码.我在这里错过了什么吗?SimpleDateFormat不知道12/24小时设置吗?如果没有,我如何以系统格式获得时间(包括小时,分钟和秒)的字符串表示?
更简单的解决方案是:
String timeString = DateUtils.formatDateTime(getContext(), timeInMillis,
DateUtils.FORMAT_SHOW_TIME);
Run Code Online (Sandbox Code Playgroud)
这可以正确处理12/24小时的用户设置.
Android 5 到 6.0.1 中似乎存在一个错误,其中DateFormat#getTimeInstance(int)返回DateFormat忽略使用 24 小时格式设置的 。其他答案提到了针对此错误的各种解决方法。您可以在https://code.google.com/p/android/issues/detail?id=181201上关注该问题。
这很大程度上取决于您的系统所在的区域设置。如果您的系统位于美国,则默认为 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);
Run Code Online (Sandbox Code Playgroud)
会给你
UK: 16:19:49
US: 4:19:49 PM
Run Code Online (Sandbox Code Playgroud)
因此,也许您可以获取系统区域设置并在格式化程序中指定它。
但是,如果您始终希望采用 24 小时格式,那么我建议您在格式化程序中明确指定它。
更新:由于您想根据设备规范获取时间格式,因此您可以使用系统的Time_12_24值并根据结果值确定您的格式。
| 归档时间: |
|
| 查看次数: |
9685 次 |
| 最近记录: |