나는시간대 B (EST)에 시간대 A (UTC)에서 날짜 시간 문자열을 변환 할 필요가 시나리오를 .변환 날짜 시간 문자열
여기에서이 변환이 발생하는 JVM은 시간대 C (HKT) 날짜 객체입니다.
그래서 코드 블록은 다음과 같다 :
내가 기대하고 출력은 즉, 마지막 문장에서, 최종 "동부 표준시 16시 30분 0초 2014 11월 14일 금"이 될 것입니다String dateString="20141114213000";
dateString += " UTC";
String formatString ="yyyyMMddHHmmss";
SimpleDateFormat sdf = new SimpleDateFormat(formatString + " z");
Date localDate = sdf.parse(dateString);
System.out.println("Local Date::"+localDate); // Local Date::Sat Nov 15 05:30:00 HKT 2014
Calendar localCal = Calendar.getInstance();
localCal.setTime(localDate);
TimeZone estTimeZone = TimeZone.getTimeZone("America/New_York");
localCal.setTimeZone(estTimeZone);
sdf.setTimeZone(estTimeZone);
System.out.println(sdf.format(localCal.getTime()));//20141114163000 EST
System.out.println(localCal.getTime());//Sat Nov 15 05:30:00 HKT 2014
사용할 수있는 날짜 개체는 EST이어야합니다.
아무에게도 정보가 있으면 알려 주시기 바랍니다.
업데이트 :
그냥 내 요청을 명확하게 할 수는 출력 Date 객체 만에 있어야합니다.
인쇄 된 샘플 코드와 출력은 더 명확한 설명을위한 것입니다. 그래서 기본적으로 UTC 날짜 문자열EST 날짜 개체로 변환 할 필요가있다 문자열 "20141114213000"을하고 JVM이 변환이 일어나고
는 HKT입니다.
결과는 코드 전체에 걸쳐 주석으로 표시됩니다. – Vinod
날짜 개체에 표준 시간대 정보가 없습니다. – assylias
@assylias 틀렸을 수도 있습니다. 나는 오라클 JDK의 소스 코드 인'java.util.Date'를'sun.util.calendar.BaseCalendar.Date' 타입의 내부 필드'cdate'로 체크하고 있었는데,이 필드는 (다른 것들 중에서) 기본 타임 존으로 초기화되었습니다. – lexicore