2017-07-02 164 views
-2

我目前正在获得正确的军事时间。对于标准时间,我希望程序显示的内容类似于4:20:01而不是16:20:01。我试过使用if语句,但是我没有成功。在Java中将军事时间转换为标准时间和世界时间?

我很困惑世界时。世界时间会和军事时间一样吗?或者它是一个单独的东西?如果是这样,我怎样才能让程序显示世界时间?

这是当前的代码,我有:

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

“世界时间”基本上是在伦敦的什么时间(或者如果他们没有观察到夏令时在伦敦的什么时间)。它与您显示时间的格式无关。除了阅读日期格式之外,您还应该阅读时区。 – ajb

+1

通用或更正确的通用协调时间(UTC)是标准时间。每个时区都有所谓的“本地”时间。你所说的“军事”时间并不是军队的专属部分,而是代表当地时间在世界大部分地区的标准。所以你的“军事”时间实际上是“当地标准时间”的大部分地方。什么时区称为“标准”时间与12小时制或24小时制表示无关,而是与世界标准时间(UTC)相抵消,UTC在许多地方随时间而变化。格林尼治标准时间(GMT)与UTC大致相同。 –

+0

以24小时格式引用UTC/GMT标准时间是标准的。 –

回答

2

通用时间(也称为UTC通用时间坐标)和军用时间是正交的概念。或者独立,如果你喜欢。

据我所知,Military time它只是意味着使用24小时制,这是世界上伟大的地方无论如何。所以这就是你已经拥有的东西:16:20:01(我认为你的程序打印01的前导零不过)。就目前而言,这可能意味着您的本地时区中的16:20:01或UTC中的16:20:01(或其他时区中的16:20:01)。我有时看到用四位数字和不冒号的军事时间:1620,甚至听到它宣布“一千六百二十”。

如果您打算使用本地或通用以及12小时或24小时时间填充字段hour,minutesecond,我会劝阻它。在程序中将数据(这里是时间)和数据展现给用户(这里是一个字符如4:20:01)通常被认为是一个好主意。所以我的建议是你总是以一种方式存储时间,然后根据当前的需要以不同的格式进行格式化。对不起,这可能会使你的班级变得多余。

为了以某种期望的格式显示时间,最简单的方法是使用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是从1到12的上午或下午内的小时。您可以在the documentation of DateTimeFormatter的格式模式字符串中找到所有可用的字母。