4

私はこれに似たいくつかのスレッドを読んだことから始めたいと思いますが、それらのどれも私の問題を本当に解決しませんでした。また、私が使用しようとしたがSimpleDateFormat成功しjoda.DateTimeなかったことを述べたいと思います。

問題は次のとおりです。

特定の日付に関する情報を保持するCalendarオブジェクトがあります:2008-04-30T00:00:00Zcalendar.getTime()メソッドを使用すると、そのメソッドがローカル値を検索していることがわかっているため、さまざまな結果を得ることができます。

したがって:

UK: 2008-04-30T01:00:00.000+0100

US: 2008-04-30T20:00:00.000-0400

ただし、タイムゾーンを完全に無視して、日付と時刻の値「2008-04-30T00:00:00」のみを保持するDateオブジェクトを取得したいと思います。

どうやってやるの?

前にも言ったように、使ってみまし SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss") たが、いつも同じ結果になります。

どんな助けでも本当にありがたいです乾杯。

4

5 に答える 5

4

CalendarsなしでDatesは意味がありませんTimeZone

カレンダーと日付は、タイムゾーンなしでは存在できません。

できませんignore completely any timezone

次のように、グリニッジ標準時 (オフセット ゼロ) のカレンダーを作成できます。

    TimeZone zone = TimeZone.getTimeZone("Etc/GMT");
    Calendar cal = Calendar.getInstance(zone);

これは、GMT タイムゾーンでのみ意味を持つ日付/カレンダーを表します。

瞬間を表すタイムスタンプが必要なようです。

于 2012-07-10T17:22:41.197 に答える
1

Calendar の初期化に標準のコンストラクタを使用していますか? タイムゾーンとロケールを指定できるコンストラクターを使用した場合はどうなるでしょうか?

protected Calendar(TimeZone zone, Locale aLocale)
于 2012-07-10T15:46:35.397 に答える
1

他の人が指摘しているようにCalendarDateオブジェクトはタイムゾーンなしでは存在できません。

Java 8 で導入されたLocalDateTimeクラスを新しい時間 API で使用することをお勧めします。

LocalDateTime literal = LocalDateTime.of(2008, 4, 30, 0, 0, 0);
LocalDateTime parsed = LocalDateTime.parse("2008-04-30T00:00:00"); // ISO-8601 by default
Assert.assertEquals(literal, parsed);
于 2019-06-12T19:37:57.417 に答える
0

古いですが、まだ正しくありません。

「calendar.getTime() メソッドを使用すると、そのメソッドがローカル値を探していることがわかっているため、異なる結果を得ることができます」

それは誤解です。getTime() はミリ秒のみを取得します。GMT として数えます。

タイムゾーンが関連するのは、出力のフォーマット中のみです。元のポスターにはコードが表示されていないため、エラーが発生した場所を特定できません。

于 2014-04-11T05:24:39.510 に答える