2008-10-21 3 views
5

다른 로케일을 지원하지만 FULL, LONG, MEDIUM 및 SHORT DateFormat 옵션에서 사용할 수있는 것 이상으로 DateFormat 디스플레이를 사용자 정의하려는 Java 응용 프로그램을 빌드하십시오. DateFormat.getDateTimeFormat()의 날짜와 시간 구성 요소 사이에 문자를 배치하거나 AM/PM 등을 소문자로 만드는 것과 같은 일을하고 싶습니다.다른 로케일 용 java.text 포맷터 사용자 정의

1) 로케일이 영어 인 경우, 새로운 SimpleDateFormat의 객체에 내 사용자 지정 형식 문자열을 사용하십시오

그것을 할 수있는 3 가지 방법을 생각할 수있다.

2) 기존 로케일

3

) 형식 문자열 내가

을 원하는 지정하는 새 로케일 변형을 생성의 기본 형식 문자열을 수정

하는 방법을 알아낼 수 없습니다 2 또는 3 (또는 경우 그것은 가능합니다), 오히려 1을하지 않을 것입니다 ... 전에 이와 같은 것을 다룰 사람이 있습니까?

AM/PM 소문자로 2 또는 3이 필요할 것 같습니다. (로캘의 dateformat 설정을위한 AmPmMarkers 리소스 지정)

답변

0

"strftime"과 "locale"은 이탈리아어가 시간 필드 사이에 콜론을 사용해야한다는 사실과 비슷하지만 Java는 전체 그 (것)들 사이에서 멈춘다. 그래서 다음 코드를 추가했습니다 :

// This is an incredibly ugly hack, but it's based on the fact that 
    // Java for some reason decided that Italy uses "." between 
    // hours.minutes.seconds, even though "locale" and strftime say 
    // something different. 
     hmsTimeFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM); 
     if (hmsTimeFormat instanceof SimpleDateFormat) 
     { 
     String str = ((SimpleDateFormat)hmsTimeFormat).toPattern(); 
     str = str.replace('.', ':'); 
     hmsTimeFormat = new SimpleDateFormat(str); 
     } 
1

대신 MessageFormat을 사용하지 않는 이유는 무엇입니까?

"{0, date, short} 여기에 텍스트 {0, 시간, 짧음}"패턴을 사용하여 원하는 것을하십시오.

SimpleDateFormat sdf = (SimpleDateFormat)sdf.getDateTimeInstance(DateTime.SHORT,DateTime.SHORT, locale); 
if (formatString != null) { 
    sdf = new SimpleDateFormat(formatString); 
} 
if (am!= null && pm != null) { 
    DateFormatSymbols symbols = sdf.getDateFormatSymbols(); 
    symbols.setAmPmStrings(new String[]{am, pm}); 
    sdf.setDateFormatSymbols(symbols); 
} 

바울 : 확실하지 분리기있다

+2

를 읽을 수 있지만, "여기 {0, 시간, 짧은} 텍스트 {0, 날짜, 짧은 ▣"에 따라 장소. –

0

우리가 알아 낸 것이이 문제를 해결하기 위해 대부분 만족스러운 방법은 다음 로케일 고유의 자원 번들은 formatString, 문자열 오전, 오후를로드하는 것입니다 하지만 DateFormatSymbols에서는 st30replace를 유지해야 할 것입니다.

0

날짜 형식을 Joda Time으로하는 것이 좋습니다. 그것은 강력하면서도 우아한 포맷팅 유연성을 제공합니다. 당신은 포맷터가 당신이하고 싶은 것을 매우 간단하게 만들 것입니다.

현재 : Joda로 이동하면 다시는 돌아 가지 않습니다!

1

Java에는이 클래스가 있으며이 클래스는 ResourceBundle 클래스입니다. Back 속성 파일이 있고 더 필요한 모든 것이 있습니다.

ResourceBundle 클래스가 없어도 properties 파일을 사용하여 모든 SimpleDateFormat 형식을 저장할 수 있습니다.

Settings formats = new Settings(); 
Properties SDFFormats = formats.load(propertiesFile); 

String SDFAmerica = SDFFormats.getProperty("FormatAmerica"); 

때때로해야하기 때문에 특성 파일에 항목이

FormatAmerica = MMM-dd-yyyy 
관련 문제