2017-07-02 9 views
-2

現在、私は正しい軍事時間を得ています。私がプログラムに表示したいのは、16:20:01ではなく4:20:01のようなものです。 if文を使ってみましたが、成功しませんでした。ミリタリータイムをJavaでStandardとUniversal timeに変換しますか?

私は普遍的な時に混乱しています。ユニバーサルタイムは軍事時間と同じですか?それとも別物なの?もしそうなら、どうすれば世界共通の時間を見せることができますか?

これは私が持っている現在のコードです:

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からのオフセットです。グリニッジ標準時(GMT)はUTCとほぼ同じです。 –

+0

UTC/GMT標準時を24時間形式で参照するのが標準です。 –

答えて

2

ユニバーサル時間(も世界時座標のUTCとして知っている)と軍事時間は直交した概念です。あなたが好きなら、独立していてもいいです。

私がMilitary timeを理解しているのは、世界の大部分がとにかく何をしているのかを24時間表示するという意味です。だからこれはあなたがすでに持っているものです:16:20:01(あなたのプログラムは01という先行ゼロで印刷しているとは思いません)。現地時間帯の16:20:01またはUTCの16:20:01(または他の時間帯の16:20:01)を意味する場合があります。私はときどき4桁の数字とコロンをつけない軍用時間を見たことがあります:1620と聞いても、それは "千六百二十"と発音しています。

hourminuteおよびsecondにローカルまたはユニバーサルの12時間または24時間のいずれかの時刻を入力する予定だった場合、私はそれをお勧めしません。一般的に、データ(ここでは時間)とユーザへのデータの提示(ここでは4:20:01のような文字列)は、プログラム内の別のものとして保持することをお勧めします。だから私の提案は、あなたは常に一方向に時間を保存して、現在の必要性に応じてそれを別々にフォーマットすることです。申し訳ありませんが、これはあなたのTimeクラスを余分にするかもしれません。

希望の形式で時刻を表示するには、DateTimeFormatterを使用するのが最も簡単です。

System.out.println(LocalTime.now(ZoneId.systemDefault()) 
      .format(DateTimeFormatter.ofPattern("h:mm:ss"))); 

ZoneId.systemDefault()

が技術的に必要とされていないが、それはあなたがJVMのデフォルトのタイムゾーンの時刻を印刷していることを明示的になりますので、私はそれを持っていることを好む

を: 4:20:01のようなものとして、現在の時刻を印刷します。

同じように世界時を印刷するには、ZoneId.systemDefault()の代わりにZoneOffset.UTCを使用してください。

だけ16:20:011620ため"HHmm"たとえば"H:mm:ss"ために、フォーマットパターン文字列に代わりに小さなhの首都Hを使用し、軍用時間を印刷します。大文字のHは、0〜23の時間帯で、hはAMまたはPMの範囲内で1〜12です。フォーマットパターン文字列に使用できるすべての文字はthe documentation of DateTimeFormatterです。

関連する問題