Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android java以24小时格式获取当前时间_Java_Android_Time_Calendar - Fatal编程技术网

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

Android java以24小时格式获取当前时间,java,android,time,calendar,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点11分。但是当我执行上

我正在尝试使用以下代码以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点11分。但是当我执行上面的代码时,我得到了7.09。有什么想法吗?

这会给你24小时的时间

public String getFormattedTime() {
    Calendar calendar = Calendar.getInstance();
    SimpleDateFormat dateFormatter = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
    return dateFormatter.format(calendar.getTime());
}

我已经想到了解决方案:

Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT+8"));
currentHour = cal.get(Calendar.HOUR_OF_DAY);
currentMinute = cal.get(Calendar.MINUTE);

上面的代码返回的正是我想要的

我无法从您提供的信息中确定,但可能的原因是JVM的时区设置是UTC。如果您在(比如)新加坡时间15:09:55运行程序,它将以UTC格式打印为7和9。如果你在一分钟后读取新加坡时间的时钟,或者从与你的设备(或模拟器)不完全同步的时钟读取时钟,它将显示下午3:11

JVM通常从设备获取其时区设置,但它从其他地方获取时区设置可能有各种各样的原因

正如Anton A.在评论中所说,对于24小时格式,您需要
一天中的小时数
,而不是
小时数
(尽管时间是UTC中的上午7:09,因此在您的情况下,此错误不是意外小时数的原因)

java.time

打印当前时间的现代方法是:

    System.out.println(LocalTime.now(ZoneId.of("Asia/Singapore")));
您使用的
Calendar
类早已过时,设计也很糟糕
LocalTime
是来自java.time的类,java.time是现代java日期和时间API,它表示一天中的时间(没有时区,但是
now
方法接受一个时区来初始化为该区域中的当前时间)。如果你的Android设备不是新的(API等级26),你需要使用它。看


还有一个链接:解释如何使用java.timeHOUR@AntonA. 这仍然与输出不匹配,因为至少分钟是实际的matching@XtremeBaumer你确定你的通话时间不等于输出吗?@AntonA。我不是OP。但在给定的时间内,他的代码应该实际输出
3:11
,而不是
7:09
7:11
@ADM。它不是重复的。我也试过了,但是时间不对,只是分钟是正确的,但是返回的小时是错误的,分钟是正确的,尽管尝试这种方法。希望它能在“String formattedDate=dateFormat.format(new Date()).toString();”中起作用。请不要教年轻人将早已过时且臭名昭著的麻烦
SimpleDateFormat
类作为第一个选项或毫无保留地使用。今天,我们在及其
DateTimeFormatter
中有了更好的功能。是的,你可以在Android上使用它。对于较旧的Android,请参见。另外,你的代码也不能解决询问者的问题。我建议
Asia/Singapore
超过
GMT+8
。我没有给出任何时区。但准确的时间到了