2017-10-03 5 views
-2

私は既に言及された回答を見てきましたが、私が直面している問題に取り組んでいません。異なるタイムゾーンの文字列を異なるタイムゾーンの日付に変換する

2017-10-03T19:45:

は、私はGMTのStringを持って、私は他の時間帯として解析する必要が00.000 + 0000

。問題は、+0000です。 SimpleDateFormatを使用して解析しようとすると、ユーザーのtimeZoneを使用するのではなく、サーバーのタイムゾーンが考慮されます。 https://www.jdoodle.com/embed/v0/java/jdk-1.8/92U

コード:

String dateString = "2017-10-02T19:45:23.000+0000"; 
SimpleDateFormat parseFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS+0000"); 
parseFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
try{ 
    Date newDate = parseFormat.parse(dateString); 
    System.out.println(newDate); 
    parseFormat.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta")); 
    String newDateString = parseFormat.format(newDate); 
    //Instead of +0000 it should be +05:30 but it is not so. 
    System.out.println(newDateString); 
} catch(ParseException e){ 
    e.printStackTrace(); 
} 

出力:

月10月2日午前19時45分23秒GMT 2017
2017-ここ

は、私は、問題のデモを作成しました10-03T01:15:23.000 + 0000

+2

[Java Simple Date Formatでのオフセット時間の使い方](https://stackoverflow.com/questions/43518627/how-to-use-offset-time-in-java-simple-date-format) ) –

+0

「+ 0000」はUTCを意味します。 –

+2

そして、質問にコードを含める方がよいので、リンクが利用できない場合、質問は「不完全」にならない:https://meta.stackoverflow.com/a/339451/7605325 –

答えて

-1

変更Z+0000

SimpleDateFormat parseFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
+0

これで問題は解決しました。私は最後にZを持つようにパターンを置き換えました。 –

-1

日付を解析する前にISTにパーサのタイムゾーンを設定してください。

import java.util.*; 
import java.text.*; 
public class MyClass{ 

    public static void main(String []args){ 
     System.out.println("Hello World"); 
     String dateString = "2017-10-02T19:45:23.000+0000"; 
     SimpleDateFormat parseFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
     //parseFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
     try{ 
      parseFormat.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta")); 
      Date newDate = parseFormat.parse(dateString); 
      System.out.println(newDate); 
      String newDateString = parseFormat.format(newDate); 
      //Instead of +0000 it should be +05:30 but it is not so. 
      System.out.println(newDateString); 
     } catch(ParseException e){ 
      e.printStackTrace(); 
     } 
    } 
} 

出力:

Hello World 
Mon Oct 02 19:45:23 GMT 2017 
2017-10-03T01:15:23.000+0530 
+0

これで問題は解決しました。私は最後にZを持つようにパターンを置き換えました。 –

1

java.time

Z+0000を交換示唆他の回答が実用的な回避策として正しいですが、今取って代わら面倒古い日時のクラスを使用しますjava.timeクラス。

String input = "2017-10-03T19:45:00.000+0000".replace("+0000" , "Z") ; 
Instant instant = Instant.parse(input) ; 

詳細については、this Questionを参照してください。

+0

これで問題は解決しました。私は最後にZを持つようにパターンを置き換えました。 –

関連する問題