Как контролировать капитализацию месяц и день имена возвращенное DateFormat?

голоса
10

Вот быстрый тест программы:

    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

Как я могу контролировать капитализацию имен. По какой-то причине, испанский и французский всегда, кажется, возвращать имена, которые начинаются со строчной буквы.

Задан 15/09/2008 в 21:44
источник пользователем
На других языках...                            


5 ответов

голоса
10

Не все языки имеют английские правила капитализации. Я думаю, вы должны были бы изменить данные, используемые API, но ваши не-английские клиенты могут не оценить его ...

about.com на французской капитализации

Ответил 15/09/2008 в 21:47
источник пользователем

голоса
5

Правила капитализации различны для разных языков. Во французском языке , названия месяцев не должны быть капитализированы .

Ответил 15/09/2008 в 21:48
источник пользователем

голоса
4

Вы не можете изменить капитализации - разные культуры капитализировать разные слова (например, на немецком языке вы капитализировать каждое существительное, а не только собственные имена).

Ответил 15/09/2008 в 21:46
источник пользователем

голоса
1

ТЛ; др

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. 

Février

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определить (а) человеческий язык для перевода имени дня, название месяца, и такие, и (б) культурные нормы Решающие вопросы аббревиатуры, капитализация, пунктуации, сепараторов, и тому подобное. Обратите внимание , что 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 ) ; 

Строка dowNameGermany = dow.getDisplayName (TextStyle.FULL, Locale.GERMANY);

О java.time

Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как java.util.Date, Calendar, и SimpleDateFormat.

Joda время проект, в настоящее время в режиме технического обслуживания , советует миграции в java.time классы.

Чтобы узнать больше, обратитесь к Oracle Учебник . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .

С драйвер JDBC соответствие с JDBC 4.2 или более поздней версии, вы можете обменять java.time объекты непосредственно с базой данных. Нет необходимости для строк или java.sql. * Классы.

Где получить классы java.time?

  • Java SE 8 , Java SE 9 , а затем
    • Встроенный.
    • Часть стандартного Java API с комплектной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time будет обратно портирован на Java 6 и 7 в ThreeTen-Backport .
  • Android
    • В более поздние версии Android реализаций пачки классов java.time.
    • Для более ранних Android, то ThreeTenABP проект адаптирует ThreeTen-Backport (упоминалось выше). Смотрите Как использовать ThreeTenABP ... .

ThreeTen-Extra проект расширяет java.time с дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как Interval, YearWeek, YearQuarter, и более .

Ответил 22/07/2017 в 00:42
источник пользователем

голоса
0

У меня проблема сейчас, когда предложение начинается с «Dimanche 07 Марса», который не имеет значения, если бы не были в начале предложения. Я предполагаю, что это не может быть изменено, если не делать вручную строки манипуляции на первый символ строки.

Ответил 06/03/2013 в 18:16
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more