datetimeを文字列形式で特定のタイムゾーンに設定していますが、UTC形式に変換することができないため、サーバーのバックエンドに送信できます。データベース。日付と時刻のピッカーの後に得られたdatetimeをutc形式に変換する
文字列:「30-9-2016 15時10分アジア/コルカタ」あなたは「currentDate.utc()を使用することができ
datetimeを文字列形式で特定のタイムゾーンに設定していますが、UTC形式に変換することができないため、サーバーのバックエンドに送信できます。データベース。日付と時刻のピッカーの後に得られたdatetimeをutc形式に変換する
文字列:「30-9-2016 15時10分アジア/コルカタ」あなたは「currentDate.utc()を使用することができ
UTC形式に変換する必要性 形式()。 '日付をUTCに変換します。
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();
}
クラス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 -
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
のような異なる変換が必要になるでしょう。
GMTの仲間にも対処する必要があります。 –
どういう意味ですか? – sven4all
Joda-Timeは "Asia/Kolkata"のような識別子を解析できません。 –