2017-10-04 3 views
2

명시 적으로 withLocale을 사용하여 로캘을 독일어로 설정하면 am/pm 문자열이 시간 값에 현지화되지만 그렇지 않습니다 해당 로케일에 맞는 24 시간 형식으로 변환하십시오.Joda DateTimeFormatter.withLocale()을 사용하면 시간 형식이 아닌 am/pm의 문자열 값에만 영향을받습니다.

Locale.setLocale(Locale.GERMAN);을 사용하여 새 프로세스를 만들면 형식이 올바른 것입니다.

withLocale()은 로케일의 모든 측면에 영향을 미치지 않아야합니까?

// Code snippet where call is being made: 
Log.d(TAG, "XYZZY getDefault(): " + Locale.getDefault().toString()); 
DateTimeFormatter timeFormat = DateTimeFormat.shortTime() 
      .withLocale(Locale.getDefault()); 
Log.d(TAG, "XYZZY timeFormat.locale: " + 
      timeFormat.getLocale().toString()); 
dateString = alarmTime.toString(timeFormat); 
Log.d(TAG, "XYZZY dateString: "+ dateString); 

가변 alarmTime 오후 11:00의 값 (2천3백시간)이있는 경우 :

10-04 14 : 17 : 41.492 (23,609)의 getDefault XYZZY() : ko 페이지
10 -04 14 : 17 : 41.493 (23609)은 : XYZZY timeFormat.locale : ko 페이지
는 10-04 14 : 17 : 41.495 (23609)은 : XYZZY 날짜 열이 : 오후 11시

지금 독일어 로케일로 전환 다시 실행하십시오. 같은 코드는 독일어로 'PM'변화에 대한 문자열을 유의하지만 시간 형식 (접미사 억제되어야하고 시간 값 23:00이어야한다) :

10-04 14시 18분 : 15.066 (23609) : XYZZY getDefault() : de_DE
10-04 14 : 18 : 15.066 (23609) : XYZZY timeFormat.locale : de_DE
10-04 14 : 18 : 15.067 (23609) : XYZZY dateString : 11 : 00 nachm. 프로세스가 지금은 독일어에 대한 올바른 시간 형식이 반환 멀리 가서 다시 시작해야, 로케일을 떠나 독일어로, 그리고에 대한

기다립니다 :

10-04 14 : 18 : 54.497 (23,881) XYZZY의 getDefault() DE_DE
10-04 14 : 18 : 54.497 (23,881) XYZZY timeFormat.locale : DE_DE
10-04 14 : 18 : 54.498 (23,881) XYZZY 날짜 열 : 23시

+0

매번 alarmTime을 어떻게 만드나요? 그리고 괄호 안의 숫자는 프로세스 ID입니다. 다시 코드를 다시 실행 한 경우 케이스 1과 케이스 2에서 왜 동일합니까? – Vahid

+0

프로세스 ID가 동일하다는 것은 내가 보는 기본 문제입니다. 프로세스가 사라지고 새로운 것이 시작되면 (로케일이 독일어로 설정 됨) 원하는 결과를 얻고 있습니다 (사례 3). –

+0

는 alarmTime을 생성하는 코드를 공유 할 수 있습니까? 그리고 Android 용으로 개발하고 있습니까? – Vahid

답변

0

면책 조항 : 대답이 없습니다. 을 (를) 재현 할 수 없지만 문제를 재현하기 위해 시도한 방법을 자세히 보여주기 위해 답변으로 작성되었습니다.

나는 JDK 1.8.0_91 및 Joda 타임 2.9.9를 사용하여 시간대 America/New_York에 로케일 en_US 실행하고 있습니다.

테스트

LocalTime time = LocalTime.parse("23:00"); 
System.out.println(time); 
System.out.println(time.toString(DateTimeFormat.shortTime())); 
System.out.println(time.toString(DateTimeFormat.shortTime().withLocale(Locale.GERMANY))); 

출력

23:00:00.000 
11:00 PM 
23:00 

shortTime() 함께하고 로케일을 변경하지 않고, 잘 작동합니다.

JVM 기본 로케일은 변경되지 않았습니다.

+0

감사합니다. Andreas, 여기에 나와있는 내용을 토대로 좀 더 조사하겠습니다. JDK 1.7.0_151을 사용하고 있는데 JodaTime 버전이 무엇인지 잘 모르겠습니다 (프로그래밍 방식으로이를 발견하는 방법이 있습니까?) –

+0

잘 모르겠지만 jar 파일 이름에는 일반적으로 버전 번호가 있습니다. – Andreas

+0

@BillB'DateTime.class.getPackage(). getSpecificationVersion()'또는'DateTime.class.getPackage(). getImplementationVersion()'을 시도해 볼 수 있습니다. 어쨌든, 나는 또한 문제없이 Eclipse (JDK 1.7.0_80)를 재현하려고 시도했다. 어쩌면 그것은 안드로이드에만 한정된 것일 수도 있습니다. –