我目前正在获得正确的军事时间。我想要显示的程序是标准时间的4:20:01而不是16:20:01。我尝试过使用if语句,但我还没有成功。
我对环球时间感到困惑。世界时是否与军事时间相同?或者它是一个单独的东西?如果是这样,我怎样才能让程序显示通用时间?
这是我目前的代码:
package readtime;
import java.time.LocalDateTime;
public class Time
{
// field data
int hour;
int minute;
int second;
public Time ()
{
hour = 0;
minute = 0;
second = 0;
}
public void getMilitaryTime()
{
LocalDateTime now = LocalDateTime.now();
hour = now.getHour();
minute = now.getMinute();
second = now.getSecond();
//System.out.print(hour + ":" + minute + ":" + second);
}
public void getStandardTime()
{
}
public void getUniversalTime()
{
}
@Override
public String toString()
{
return ("Time: " + hour + ":" + minute + ":" + second);
}
}
答案 0 :(得分:2)
世界时(也称为世界时间坐标的UTC)和军事时间是正交概念。或者是独立的,如果你愿意的话。
据我了解Military time,这仅仅意味着使用24小时制,这正是世界上很多地方正在做的事情。所以这就是你已经拥有的:16:20:01(我不认为你的程序打印01但前导零)。就目前而言,它可能意味着您当地时区的16:20:01或UTC的16:20:01(或其他时区的16:20:01)。我有时看到用四位数写的军事时间而没有冒号:1620
甚至听说它发音为“一千六百二十”。
如果您打算使用本地或通用以及12小时或24小时时间填充您的字段hour
,minute
和second
,我会劝阻您。通常认为将数据(此处为时间)和数据表示保存给用户(此处为4:20:01之类的字符串)作为程序中的单独内容是个好主意。所以我的建议是你总是以一种方式存储时间,然后根据当前的需要对其进行不同的格式化。对不起,这可能会使您的Time
课程变得多余。
要以某种所需格式显示时间,最简单的方法是使用DateTimeFormatter
。要将当前时间打印为4:20:01
:
System.out.println(LocalTime.now(ZoneId.systemDefault())
.format(DateTimeFormatter.ofPattern("h:mm:ss")));
ZoneId.systemDefault()
在技术上并不需要,但它明确表示您在JVM的默认时区中打印时间,所以我更喜欢将它放入。
要以相同方式打印通用时间,只需使用ZoneOffset.UTC
代替ZoneId.systemDefault()
。
要打印军事时间,只需在格式模式字符串中使用大写H
而不是小h
,例如"H:mm:ss"
或16:20:01
使用"HHmm"
1620
。资本H
表示从0到23的一天中的小时,而h
表示在AM或PM之间从1到12的小时。您可以在{中的格式模式字符串中找到您可能使用的所有字母{3}}