2012-03-01 4 views
0

약 1 시간 동안이 작업을 시도했지만 정상적으로 작동하지 않습니다.Android : 날짜 문자열의 시간대 변경

기본적으로 데이터베이스에서 날짜 문자열을 읽는 중입니다. 형식은 yyyy-MM-dd HH : mm : ss입니다 (2012-03-01 14:32:00).

이 시점에서 내가 가진 모든 문자열은 시간대 정보가 아닙니다. 이 시간은 우리 서버에서 만들어지며 궁극적으로는 장치 데이터베이스에 저장됩니다. 동부 표준시임을 알았습니다. 내가 시간을 로그인 할 때 그래서 2012-03-01 10시 18분 14초을 보여줍니다

SimpleDateFormat sourceFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     sourceFormat.setTimeZone(TimeZone.getTimeZone("EST")); 

     Date parsed = sourceFormat.parse("2012-03-01 10:18:14"); 

     TimeZone tz = TimeZone.getDefault(); 
     SimpleDateFormat destFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     destFormat.setTimeZone(tz); 

     String result = destFormat.format(parsed); 

     Log.v("TZ", result); 

내 에뮬레이터 EST이며, 올바른 :

그래서 나는 기본적으로 다음과 같은 코드를 시도했다.

그러나 미국/로스 엔젤레스라고 sourceFormat의 표준 시간대를 변경하면 2012-03-01 05:18:14의 결과를 얻습니다.

저는 전문가는 아니지만 로스 엔젤레스가 몬트리올 (우리 사무실이있는 EST)보다 3 시간 늦을 거라 확신합니다. 그래서 시간이 걸릴 경우 2012-03-01 10:18:14 미국/로스 앤젤레스 시간으로 전화 한 다음 EST로 변환하십시오. 2012-03-01 13:18:14.

무슨 일입니까?

도움을 주시면 감사하겠습니다.

고마워요.

+0

실제 장치에서 테스트 할 수 있습니까? 때로는 에뮬레이터가 파멸합니다. – yorkw

+0

예 장치에서 테스트 할 수 있습니다. 내일 입력하는 즉시 시도해 보겠습니다. 에뮬레이터가 항상 실제처럼 작동하지는 않지만 현재 시간은 내 바탕 화면에 그대로 표시된다는 점을 이해합니다. – PaulG

답변

0

아직 해결하지 못했다면 여러 시간대에 동일한 약어가 자주 사용되므로 세 문자 표준 시간대 ID (예 : "EST")는 JDK 1.2에서 사용되지 않습니다. (예 : "CST"는 미국 "중부 표준시"및 "중국 표준시"일 수 있음) Java 플랫폼은 그 중 하나만 인식 할 수 있습니다. 따라서 sourceFormat.setTimeZone(TimeZone.getTimeZone("EST"));을 제공하더라도 코드의 시간대는 GMT로 기본 설정됩니다. sourceFormat.setTimeZone(TimeZone.getTimeZone("GMT-05:00"));,

또는 RFC 822 시간대 형식 : sourceFormat.setTimeZone(TimeZone.getTimeZone("-05"));
일반 시간대 형식 -

가이 문제를 방지하려면 함께 3 문자 영역 ID를 교체하려고 할 수 있습니다.