2012-09-10 3 views
0

날짜가 주어지면 2013-03-24라고 말하고 미국/태평양 표준 시간대로 그 날짜의 끝으로 변환하고 싶습니다. 해당 지역의 특정 날짜에 대한 시간대가 태평양 표준시 또는 태평양 표준시가 될지 파악하는 방법이 있습니까? BTW, 나는 자바를 사용하고있다.일광 절약 시간제를 사용하여 하루 종일을 선택하는 방법은 무엇입니까?

나는이 작업을 수행 할 방법이 없다고 생각합니다. 적어도 시간대 전환이 일어날 때를 알고있는 일부 데이터베이스를 쿼리하지 않고도 그렇습니다.하지만 확인해 보겠습니다.

답변

0

자바 캘린더가이를 처리하므로 시간대를 직접 정렬 할 필요가 없습니다.

DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
Date dateInServerTZ = format.parse("2013-03-24"); 
Calendar calInServerTZ = Calendar.getInstance(); 
calInServerTZ.setTime(dateInServerTZ); 
Calendar calInPST = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles")); 
calInPST.set(Calendar.YEAR, calInServerTZ.get(Calendar.YEAR)); 
calInPST.set(Calendar.DAY_OF_YEAR, calInServerTZ.get(Calendar.DAY_OF_YEAR)); 
calInPST.set(Calendar.HOUR_OF_DAY, 23); 
calInPST.set(Calendar.MINUTE, 59); 
calInPST.set(Calendar.SECOND, 59); 
calInPST.set(Calendar.MILLISECOND, 999); 
Date endOfDayPST = calInPST.getTime(); 

당신은 PST로 구문 분석에 의해 단계를 제거 할 수 있지만이 예제는 서버 시간 및 사용자 시간 사이의 관계에 무슨 일이 일어나고 있는지 더 분명하게 느꼈다.

이것은 분명히 더 효율적이 될 것이다 :

DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
format.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles")); 
Date dateInPST = format.parse("2013-03-24"); 
Calendar calInPST = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles")); 
calInPST.setTime(dateInPST); 
calInPST.set(Calendar.HOUR_OF_DAY, 23); 
calInPST.set(Calendar.MINUTE, 59); 
calInPST.set(Calendar.SECOND, 59); 
calInPST.set(Calendar.MILLISECOND, 999); 
관련 문제