在我的应用程序中,我可以选择暂停执行一段时间。我想显示执行将恢复的时间,包括秒,我希望时间字符串根据设置进行格式化。这是我提出的代码:
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小时设置吗?如果没有,我如何以系统格式获得时间(包括小时,分钟和秒)的字符串表示?
答案 0 :(得分:6)
更简单的解决方案是:
String timeString = DateUtils.formatDateTime(getContext(), timeInMillis,
DateUtils.FORMAT_SHOW_TIME);
这可以正确处理12/24小时的用户设置。
答案 1 :(得分:4)
Android 5到6.0.1中似乎存在一个错误,其中DateFormat#getTimeInstance(int)
返回忽略使用24小时格式设置的DateFormat
。其他答案提到了这个bug的各种变通方法。您可以在https://code.google.com/p/android/issues/detail?id=181201上关注此问题。
答案 2 :(得分:2)
它很可能取决于您的系统所在的区域设置。如果您的系统位于美国,则默认为12小时而不是24小时。即。
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值并根据结果值确定格式。
答案 3 :(得分:1)
String timestamp = (DateFormat.format("yyyy.MM.dd kk:mm:ss", new Date())).toString();
而不是......,使用kk。
答案 4 :(得分:0)
您应该创建自己的格式模式。如果我没记错的话,你使用的模式是“HH:mm:ss.SSS”来给你小时,分钟,秒和小数秒的三位精度。
请参阅SimpleDateFormat的API参考文档。