3

SimpleDateFormatを使用して、タイムゾーンを別の国のタイムゾーンに設定しようとしています。SimpleDateFormat.format()は指定されたタイムゾーンの正しい現在時刻を返しますが、SimpleDateFormat.parse()はローカルの現在時刻を返します。なぜこれが発生しているのかわかりません。これが私のコードです-

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:MM:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
System.out.println("Time1 : " + dateFormat.format(new Date()));
System.out.println("Time2 : " + dateFormat.parse(dateFormat.format(new Date())));

出力は-

Time1 : 2013-01-17 21:01:55
Time2 : Fri Jan 18 10:30:55 IST 2013

Time1は「America/Los_Angeles」の出力であり、Time2はlocal(つまり「Asia / Calcutta」)の出力です

与えられたタイムゾーンの現在の時刻をUTC秒形式(つまり、1970年1月1日からの秒)で表示したいだけです。

SimpleDateFormat.format()とSimpleDateFormat.parse()が、1つのタイムゾーンのみを設定しているのに異なる時間を与えるのはなぜですか?

私を助けてください。

4

5 に答える 5

7

Parseを使用すると、指定された日付を特定の形式で理解するようにコンパイラに命令します。それを理解し、独自の形式で保持し、必要な形式をいつでも提供できます。

出力が得られます。これは、入力した日付が正常に解析されたことを示すシグナルです。変数が格納している日付の形式を制御することはできません。

format を使用すると、日付を任意の形式に変換できます。

単純に解析 -> 読み取り (任意の方法で読み取り、任意の方法で保存できます) フォーマット -> 書き込み (必要な形式で提供します)

于 2013-01-18T05:48:35.983 に答える
3

dateFormat.format() は、指定された形式で出力を提供し、タイムゾーンをフォーマッターで設定されたものに変更します。(例: dateFormat.setTimeZone(TimeZone.getTimeZone("アメリカ/ロサンゼルス"));)

一方、dateFormat.parse() は、日付が既に指定されたタイムゾーンにあると想定し、日付をローカル タイムゾーンに変換します。

于 2018-08-08T15:12:00.813 に答える
0

最初の行では、ローカル日付を特定のタイムゾーンにフォーマットしています。特定のタイムゾーンで渡された引数の日付を表す文字列を返します。ただし、解析関数は異なります。1 月からのミリ秒数を表す日付オブジェクトを返します。 1970 年午前 12 時、UTC。タイムゾーン情報は含まれていません。

于 2013-01-18T05:57:49.740 に答える
0

2番目のprintlnのdateFormat.parse()

System.out.println("Time2 : " + dateFormat.parse(dateFormat.format(new Date())));

Date を返し、Date.toString() は日付の文字列表現をEEE MMM dd HH:mm:ss zzz yyyy形式で返します。Date.toString() API を参照してください

于 2013-01-18T05:54:08.770 に答える