2017-09-04 12 views
-3

通知サーバーから日付文字列を次の形式で受け取った。 2017-09-04T07:09:30.269 + 00:00Android文字列の日付「2017-09-04T07:09:30.269 + 00:00」に変換する

データベースに保存するには、長い形式に変換します。

public static long convertStringDatetoLong(final String date, final String inputFormat) { 
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat(inputFormat); 
     try { 
      Date outputDate = simpleDateFormat.parse(date); 
      return outputDate.getTime(); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return 0; 
    } 

は、私はconvertStringDatetoLong(date, "yyyy-mm-dd'T'HH:mm:ss.SSSXXX"); を呼び出すしかし、私は変換が長い何とか間違っていることがわかりました。

結果の時間は1483513770269で間違っています。 それは

2017-09-04T07(私はにcurrentTimeMillisとなっている)... 15で始めるとする時には1504509270911のようにする必要があります:09:30.269 + 00:00、入力された時間帯が同じではありません私のタイムゾーンはGMT + 08:00

私はデバイスのタイムゾーンに変換し、保存するための正確なミリ秒を取得する方法がわかりません。

更新日:

申し訳ありませんが、私は愚かなことをやっているということ。 MMでないmmでなければなりません。あなたは簡単にこのようなオブジェクトZonedDateTimeでこれを行うことができます

答えて

0

String example = "2017-09-04T07:09:30.269+00:00"; 
OffsetDateTime offset = OffsetDateTime.parse(example); 
ZonedDateTime result = offset.atZoneSameInstant(ZoneId.systemDefault()); // Put you wanted zone here 

そこから上は簡単にこのコード行でミリ秒とタイムスタンプを取得することができます:

Long timestamp = startTime.toInstant().getEpochSecond(); 
+0

この必須API 26.下位レベルのAPI> 16をサポートする必要があります。 –

+0

ああ、書きませんでした私はどこにいても高いAPIレベルを使用することを期待していました。 – Nico

0

はこれを試してみてください、

String timeStr = "2017-09-04T07:09:30.269+00:00"; 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
Date Obj= null; 
try { 
    Obj = sdf.parse(timeStr); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 

long time = Obj.getTime(); 
System.out.println(time); 
関連する問題