DateFormat에서 반환된 월 및 일 이름의 대문자 사용을 제어하는 ​​방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/66750

  •  09-06-2019
  •  | 
  •  

문제

다음은 빠른 테스트 프로그램입니다:

    public static void main( String[] args )
{
    Date date = Calendar.getInstance().getTime();

    System.out.println("Months:");
    printDate( "MMMM", "en", date );
    printDate( "MMMM", "es", date );
    printDate( "MMMM", "fr", date );
    printDate( "MMMM", "de", date );

    System.out.println("Days:");
    printDate( "EEEE", "en", date );
    printDate( "EEEE", "es", date );
    printDate( "EEEE", "fr", date );
    printDate( "EEEE", "de", date );

}

public static void printDate( String format, String locale, Date date )
{
    System.out.println( locale + ": " + (new SimpleDateFormat( format, new Locale( locale ) )).format( date ) );
}

출력은 다음과 같습니다

Months: en: September es: septiembre fr: septembre de: September Days: en: Monday es: lunes fr: lundi de: Montag

이름의 대문자 사용을 어떻게 제어할 수 있나요?어떤 이유에서인지 스페인어와 프랑스어는 항상 소문자로 시작하는 이름을 반환하는 것 같습니다.

도움이 되었습니까?

해결책

모든 언어가 영어 대문자 사용 규칙을 공유하는 것은 아닙니다.API에서 사용하는 데이터를 변경해야 할 것 같지만 영어가 아닌 클라이언트는 이를 좋아하지 않을 수도 있습니다...

about.com의 프랑스어 대문자

다른 팁

대문자 사용 규칙은 언어마다 다릅니다.프랑스어에서는 월 이름 대문자로 쓰면 안 된다.

대문자 사용을 변경하고 싶지 않을 수도 있습니다. 문화에 따라 다른 단어를 대문자로 사용합니다(예를 들어 독일어에서는 고유 명사뿐만 아니라 모든 명사를 대문자로 사용합니다).

tl;dr

이름의 대문자 사용을 어떻게 제어할 수 있나요?

당신은 그렇지 않습니다.언어와 문화에 따라 대문자, 구두점, 약어 등에 대한 규칙이 다릅니다.

Month.from( LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) )    // Get current month.
     .getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH )     // Localize automatically. Specify `Locale` to determine human language and cultural norms for translation. 

페브리에

LocalDate.now( ZoneId.of( "Pacific/Auckland" ) )                  // Get current date as seen by people in a certain region (time zone).
    .getDayOfWeek()                                               // Get the day-of-week as a pre-defined `DayOfWeek` enum object.
    .getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH )

룬디

현지화

다른 사람들이 말했듯이 대문자 사용에 대한 자신만의 편협한(미국 영어?) 개념을 강요해서는 안 됩니다.괜찮은 날짜-시간 라이브러리를 사용하고 자동으로 현지화되도록 하세요.

java.time

현재 레거시이며 java.time 클래스로 대체된 끔찍한 오래된 날짜-시간 클래스를 사용하고 있습니다.

그만큼 LocalDate 클래스는 시간과 시간대가 없는 날짜 전용 값을 나타냅니다.

시간대는 날짜를 결정하는 데 매우 중요합니다.특정 순간의 날짜는 전 세계의 구역에 따라 다릅니다.예를 들어, 자정이 몇 분 지난 후 파리 프랑스 새로운 날이지만 여전히 "어제"입니다. 몬트리올 퀘벡.

지정 적절한 시간대 이름 형식으로 continent/region, 와 같은 America/Montreal, Africa/Casablanca, 또는 Pacific/Auckland.다음과 같은 3~4자 약어를 사용하지 마십시오. EST 또는 IST 있는 그대로 ~ 아니다 표준화되지도 않고 고유하지도 않은(!) 실제 시간대입니다.

ZoneId z = ZoneId.of( "Asia/Kolkata" );
LocalDate today = LocalDate.now( z );

한 달로 작업하려면 다음을 추출하세요. Month 열거형 객체.요일에 대해서도 마찬가지입니다. DayOfWeek.

부르다 getDisplayName.통과 TextStyle 약어로.통과 Locale (a) 요일 이름, 월 이름 등을 번역하기 위한 인간 언어 및 (b) 약어, 대문자 사용, 구두점, 구분 기호 등의 문제를 결정하는 문화적 규범을 결정합니다.참고하세요 Locale 가지다 아무것도 아님 시간대와 관련이 있습니다.

Month m = today.getMonth() ;
String mNameQuébec = m.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ; 
String mNameGermany = m.getDisplayName( TextStyle.FULL , Locale.GERMANY ) ; 

…그리고…

DayOfWeek dow = today.getDayOfWeek() ;
String dowNameQuébec = dow.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ; 

String dowNameGermany = dow.getDisplayName( TextStyle.FULL , Locale.GERMANY ) ;

에 대한 java.time

그만큼 java.time 프레임워크는 Java 8 이상에 내장되어 있습니다.이 클래스는 번거로운 기존 클래스를 대체합니다. 유산 다음과 같은 날짜-시간 수업 java.util.Date, Calendar, & SimpleDateFormat.

그만큼 조다타임 프로젝트, 지금 유지 관리 모드, 다음으로 마이그레이션을 권장합니다. java.time 클래스.

자세한 내용은 다음을 참조하세요. 오라클 튜토리얼.그리고 Stack Overflow를 검색해 많은 예와 설명을 알아보세요.사양은 JSR 310.

JDBC 드라이버 준수 JDBC 4.2 또는 나중에 교환할 수 있습니다. java.time 데이터베이스와 직접 개체를 연결합니다.문자열이나 java.sql.* 클래스가 필요하지 않습니다.

java.time 클래스는 어디서 구할 수 있나요?

그만큼 쓰리텐-엑스트라 프로젝트는 추가 클래스로 java.time을 확장합니다.이 프로젝트는 java.time에 향후 추가될 수 있는 기능을 입증하는 기반입니다.여기에서 다음과 같은 유용한 클래스를 찾을 수 있습니다. Interval, YearWeek, YearQuarter, 그리고 .

문장이 "dimanche 07 mars"로 시작하는 경우 문제가 발생합니다. 문장 시작 부분이 아니더라도 문제가 되지 않습니다.문자열의 첫 번째 문자에 대해 수동으로 문자열을 조작하지 않는 한 이는 변경할 수 없는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top