2017-10-12 14 views
-2

ISTまたは他のタイムゾーンを1つのゾーンから取得しようとすると、GMT TIMEゾーンストリングに変換されます。しかし、GMTベースの文字列時間からタイムスタンプを取得しようとすると、ローカルのタイムスタンプ値が得られます。理由は何か。GMT/CSTベースの文字列をJavaのタイムスタンプに変換する

+1

ここにコードを掲載する –

答えて

0

"なぜそういうの?"はい、Javaでは、デフォルトで、JVMが実行されているローカルのタイムゾーンで日付値を「プリントアウト」(レンダリング)したいと仮定しているためです。

@Before 
public void setup() { 
    sdf = new SimpleDateFormat(Hello.TS_FORMAT);// TS_FORMAT = "yyyyMMdd'T'HHmmssXX"; 
    Calendar cal = sdf.getCalendar(); 
    cal.setTimeZone(TimeZone.getTimeZone(UTC_TIME_ZONE));// UTC_TIME_ZONE = "GMT"; 
    sdf.setCalendar(cal); 
    ... 
} 

@Test 
public void testTimestampFormat03() { 
    String inboundTimestampText = '20170322T170805-0700';// means inbound is in Pacific Time Zone (17:08:05 on 03/22) 
    Date dt = sdf.parse(inboundTimestampText); 
    String defaultFormat = dt.toString();// default locale is Central Time Zone (19:08:05 on 03/22) 
    String actualFormat = sdf.format(dt); 
    String expectedFormat = inboundTimestampText.replace('T17', 'T00'); 
    expectedFormat = expectedFormat.replace('0322', '0323');// expected Time Zone is UTC (00:08:05 on 03/23) 
    expectedFormat = expectedFormat.replace('-', 'Z'); 
    assertEquals(expectedFormat, actualFormat + '0700'); 
} 

あなたは日付値がで「レンダリング」したい時間帯を指定する必要があります。基本的に、あなたは日付文字列を読み込むために使用される日付formatter.format(aDate)をプリントアウトするために、「同じ」フォーマッタを使用する必要がありますformatter.parse(aDtaeString)

0

ウェブ上でこれが見つかりました。

Calendar calendar = Calendar.getInstance(); 
TimeZone fromTimeZone = calendar.getTimeZone(); 
TimeZone toTimeZone = TimeZone.getTimeZone("CST"); 

calendar.setTimeZone(fromTimeZone); 
calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1); 
if (fromTimeZone.inDaylightTime(calendar.getTime())) { 
    calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1); 
} 

calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset()); 
if (toTimeZone.inDaylightTime(calendar.getTime())) { 
    calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings()); 
} 

System.out.println(calendar.getTime()); 
関連する問題