17

考えられる解決策: Java Date を別の Time as Date 形式に変換する

私はそれを経験しましたが、私の答えが得られません。

文字列 " 2013-07-17T03:58:00.000Z " があり、それを new Date().Date d=new Date(); の作成中に取得する同じ形式の日付に変換したい

時刻は IST Zone - Asia/Kolkata である必要があります

したがって、上記の文字列の日付は

Wed Jul 17 12:05:16 IST 2013 //インド標準 GMT+0530 による何時でも

String s="2013-07-17T03:58:00.000Z";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
TimeZone tx=TimeZone.getTimeZone("Asia/Kolkata");
formatter.setTimeZone(tx);
d= (Date)formatter.parse(s);
4

3 に答える 3

25

タイムゾーンにはカレンダーを使用します。

TimeZone tz = TimeZone.getTimeZone("Asia/Calcutta");
Calendar cal = Calendar.getInstance(tz);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
sdf.setCalendar(cal);
cal.setTime(sdf.parse("2013-07-17T03:58:00.000Z"));
Date date = cal.getTime();

ただし、この場合は Joda Timeの方が機能が優れているため、Joda Timeをお勧めします。JodaTime の場合、次のようなことができます。

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
DateTime dt = dtf.parseDateTime("2013-07-17T03:58:00.000Z");
Date date = dt.toDate();
于 2013-07-17T06:54:43.503 に答える
4

Date にはタイムゾーンがありません。インド タイム ゾーンでの日付の文字列表現を知りたい場合は、別の SimpleDateFormat を使用して、そのタイム ゾーンをインド標準に設定し、この新しい SimpleDateFormat で日付をフォーマットします。

編集: コードサンプル:

String s = "2013-07-17T03:58:00.000Z";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
Date d = formatter.parse(s);

System.out.println("Formatted Date in current time zone = " + formatter.format(d));

TimeZone tx=TimeZone.getTimeZone("Asia/Calcutta");
formatter.setTimeZone(tx);
System.out.println("Formatted date in IST = " + formatter.format(d));

出力 (現在のタイム ゾーンはパリ - GMT+2):

Formatted Date in current time zone = 2013-07-17T05:58:00.000+02
Formatted date in IST = 2013-07-17T09:28:00.000+05
于 2013-07-17T06:44:32.390 に答える