少年恃险若平地,独倚长剑凌清秋。这篇文章主要讲述Android java以24小时格式获取当前时间相关的知识,希望能为你提供帮助。
我想通过使用下面的代码以24小时格式获取当前时间:
Calendar cal = Calendar.getInstance();
int currentHour = cal.get(Calendar.HOUR);
int currentMinute = cal.get(Calendar.MINUTE);
System.out.println(currentHour);
System.out.println(currentMinute);
我现在的时间是新加坡时间3.11PM。但是当我执行上面的代码时,我得到7.09。有任何想法吗?
提前致谢!
答案我无法确定您提供的信息,但可能的原因是您的JVM的时区设置是UTC。如果您在新加坡时间15:09:55运行您的程序,则会以UTC格式打印为7和9。如果您稍后在新加坡时间读取您的时钟,或者从与您的设备(或模拟器)不完全同步的时钟读取它,它将在下午3:11显示。
JVM通常从设备中获取其时区设置,但是可能有各种各样的原因导致它从其他地方获取它。
正如Anton A.在评论中所说,你需要
HOUR_OF_DAY
而不是HOUR
24小时格式(虽然时间是UTC时间的早上7:09,所以这个错误不是你的情况下意外时间的原因)。java.time
打印当前时间的现代方式是:
System.out.println(LocalTime.now(ZoneId.of("Asia/Singapore")));
你使用的
Calendar
课程已经过时且设计不佳。 LocalTime
是来自java.time的类,现代Java日期和时间API,表示一天中的时间(没有时区,但now
方法接受一个时区来初始化到该区域中的当前时间)。如果您的android设备小于新设备(在API级别26下),则需要使用the ThreeTenABP library才能使用它。见How to use ThreeTenABP in Android Project。还有一个链接:Oracle tutorial: Date Time解释如何使用
java.time
。另一答案我已经找到了解决方案:
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT+8"));
currentHour = cal.get(Calendar.HOUR_OF_DAY);
currentMinute = cal.get(Calendar.MINUTE);
上面的代码完全返回我想要的内容
另一答案【Android java以24小时格式获取当前时间】这将为您提供24小时格式的时间
public String getFormattedTime() {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat dateFormatter = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
return dateFormatter.format(calendar.getTime());
}
推荐阅读
- 从数据库获取事件并放置日历视图(android)
- 在Android中,每天在特定时间设置重复警报
- Android日历序列化与Java 6不兼容
- 解决方案(从C#app调用Crystal Report导致“数据库登录失败”或“加载报告失败”)
- Jackson ObjectMapper给出了递归数据类型的错误
- Android java测试浮动负值和正值不起作用吗()
- Settings.Secure.ANDROID_ID在构建APK和签名APK中为何不同()
- Struts 2 - 没有映射名称空间[/]的动作和与上下文路径[/ LoginApplication]相关联的动作名称[validateLogin]
- ActionMapper类在struts 2中的作用是什么