2017-10-12 2 views
-2

한 구역에서 시간을 얻으려고하면 IST 또는 다른 모든 시간대가 GMT TIME 구역 문자열로 변환됩니다. 그러나 GMT 기반 문자열 시간에서 타임 스탬프를 얻으려고하면 로컬 타임 스탬프 값을 얻습니다. 왜 그렇게 특별한 이유가 있습니다.GMT/CST 기반 문자열을 Java의 Timestamp로 변환

+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()); 
관련 문제