サーバーは次のように時間を送信します:
2012-06-08 17:00:00 +0100
HH:MM
現地時間に基づいて変更する必要があります。たとえば、この時間は、日本、インド、米国などの何時です。
これどうやってするの?ありがとう
オプション 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 の真価を発揮するところです。
java.util.Dateは常にUTCです。現地時間だと思う理由は何ですか?問題は、ローカルタイムゾーンを使用するCalendarのインスタンスを介して、またはローカルタイムゾーンも使用するDate.toString()を使用して表示していることであると思われます。
これが問題ではない場合は、サンプルコードを投稿してください。
ただし、とにかく、はるかに明確なAPIを提供するJodaTimeを使用することをお勧めします。
JodaTime を使用します。これは、Java の Date and Time API よりもはるかに優れており、安全です。LocalTime オブジェクト (HH:MM) を返すメソッドは多数あります。
例として、 new DateTime(あなたの日時).toLocalTime();