1

サーバーは次のように時間を送信します:

2012-06-08 17:00:00 +0100

HH:MM現地時間に基づいて変更する必要があります。たとえば、この時間は、日本、インド、米国などの何時です。

これどうやってするの?ありがとう

4

4 に答える 4

7

オプション 1: java.util.Date/を使用Calendar:

まず、値を に解析してから、Date目的の形式とタイム ゾーンに再フォーマットする必要があります。

SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z",
                                                    Locale.US);
Date date = inputFormat.parse(inputText);

// Potentially use the default locale. This will use the local time zone already.
SimpleDateFormat outputFormat = new SimpleDateFormat("HH:mm", Locale.US);
String outputText = outputFormat.format(date);

オプション 2: Joda Time を使用する

Joda Timeは、Java 用のはるかに優れた日付/時刻ライブラリです。

DateTimeFormatter inputFormatter = DateTimeFormat
    .forPattern("yyyy-MM-dd HH:mm:ss Z")
    .withLocale(Locale.US);

DateTime parsed = inputFormatter.parseDateTime(inputText);

DateTimeFormatter outputFormatter = DateTimeFormat
    .forPattern("HH:mm")
    .withLocale(Locale.US)
    .withZone(DateTimeZone.getDefault());

String outputText = outputFormatter.print(parsed);

本当に必要な場合にのみ、文字列表現との間で変換する必要があることに注意してください。それ以外の場合は、使用状況に基づいて最も適切なタイプを使用してください。これが Joda Time の真価を発揮するところです。

于 2012-05-25T07:40:37.953 に答える
0

java.util.Dateは常にUTCです。現地時間だと思う理由は何ですか?問題は、ローカルタイムゾーンを使用するCalendarのインスタンスを介して、またはローカルタイムゾーンも使用するDate.toString()を使用して表示していることであると思われます。

これが問題ではない場合は、サンプルコードを投稿してください。

ただし、とにかく、はるかに明確なAPIを提供するJodaTimeを使用することをお勧めします。

于 2012-05-25T07:38:14.383 に答える
0

JodaTime を使用します。これは、Java の Date and Time API よりもはるかに優れており、安全です。LocalTime オブジェクト (HH:MM) を返すメソッドは多数あります。

例として、 new DateTime(あなたの日時).toLocalTime();

于 2012-05-25T07:33:18.563 に答える