2016-09-24 8 views
1

datetimeを文字列形式で特定のタイムゾーンに設定していますが、UTC形式に変換することができないため、サーバーのバックエンドに送信できます。データベース。日付と時刻のピッカーの後に得られたdatetimeをutc形式に変換する

文字列:「30-9-2016 15時10分アジア/コルカタ」あなたは「currentDate.utc()を使用することができ

答えて

0

UTC形式に変換する必要性 形式()。 '日付をUTCに変換します。

1

joda http://www.joda.org/joda-time/を使用してください。

このスニペットの結果、「2016-09-30T09:40:00.000Z」

public String convert(String timeStamp) { 
    DateTimeFormatter fmt = DateTimeFormat.forPattern("d-M-yyyy HH:mm ZZZ"); 
    DateTime dt = fmt.parseDateTime(timeStamp); 
    return dt.toInstant().toString(); 
} 
+0

GMTの仲間にも対処する必要があります。 –

+0

どういう意味ですか? – sven4all

+0

Joda-Timeは "Asia/Kolkata"のような識別子を解析できません。 –

0

クラスSimpleDateFormatは「アジア/コルカタ」のようなタイムゾーン識別子を解析するためのオプション(いずれもゾーンに欠けているようです名前もオフセットもありません)。この種のtz情報を正確に表すパターン記号VVは存在しない。

あなたがSimpleDateFormatを使う、という場合は、次のように文字列の前処理を使用してこの制限を回避できます。

input = input.replace("Asia/Kolkata", "GMT+05:30"); 
// and then use pattern symbol "z" or "Z" 

主な欠点がある:あなたの入力に使用されるコンクリートTZ識別子に関するハードワイヤード仮定を行います。

しかし、パターン記号 "VV"を使用して識別子 "Asia/Kolkata"などを解析することができる少なくとも3つの他のライブラリがあります。

A)ThreetenABP -

Joda-Time-Android

C sven4all @の答えを参照するJava-8

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d-M-yyyy HH:mm VV"); 
Instant instant = ZonedDateTime.parse(input, dtf).toInstant(); 
java.util.Date jud = new java.util.Date(instant.toEpochMilli()); 

B)でjava.time - パッケージのバックポートのアンドロイド適応)私の図書館Time4A

ChronoFormatter<Moment> f = 
    ChronoFormatter.ofMomentPattern(
    "d-M-yyyy HH:mm VV", PatternType.CLDR, Locale.ROOT, ZonalOffset.UTC); 
Moment moment = f.parse(input); 
java.util.Date jud = TemporalType.JAVA_UTIL_DATE.from(moment); 

データベースに保存するには、たとえばjava.sql.Timestampのような異なる変換が必要になるでしょう。

関連する問題