在Java中将军事时间转换为标准时间和世界时间?

时间:2017-07-02 23:27:52

标签: java time

我目前正在获得正确的军事时间。我想要显示的程序是标准时间的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);
    }

}

1 个答案:

答案 0 :(得分:2)

世界时(也称为世界时间坐标的UTC)和军事时间是正交概念。或者是独立的,如果你愿意的话。

据我了解Military time,这仅仅意味着使用24小时制,这正是世界上很多地方正在做的事情。所以这就是你已经拥有的:16:20:01(我不认为你的程序打印01但前导零)。就目前而言,它可能意味着您当地时区的16:20:01或UTC的16:20:01(或其他时区的16:20:01)。我有时看到用四位数写的军事时间而没有冒号:1620甚至听说它发音为“一千六百二十”。

如果您打算使用本地或通用以及12小时或24小时时间填充您的字段hourminutesecond,我会劝阻您。通常认为将数据(此处为时间)和数据表示保存给用户(此处为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}}