我正在尝试使用以下代码以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。有什么想法吗?
感谢进阶!
答案 0 :(得分:1)
我不确定您提供的信息,但可能的原因是您的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日期和时间API java.time中的类,它代表一天中的时间(无时区,但是now
方法接受一个时区以初始化为当前时间在那个区域)。如果您的Android设备不是新设备(在API级别26下),则需要the ThreeTenABP library才能使用它。参见How to use ThreeTenABP in Android Project。
另一个链接:Oracle tutorial: Date Time解释了如何使用java.time
。
答案 1 :(得分:0)
我已经找到了解决方案:
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT+8"));
currentHour = cal.get(Calendar.HOUR_OF_DAY);
currentMinute = cal.get(Calendar.MINUTE);
上面的代码完全返回了我想要的
答案 2 :(得分:-1)
这将为您提供24小时制的时间
public String getFormattedTime() {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat dateFormatter = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
return dateFormatter.format(calendar.getTime());
}