Android Java以24小时格式获取当前时间

时间:2018-08-30 07:12:15

标签: java android time calendar

我正在尝试使用以下代码以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。有什么想法吗?

感谢进阶!

3 个答案:

答案 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());
}
相关问题