Domanda

Ecco un programma di test rapido:

    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 ) );
}

L'output è:

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

Come posso controllare le maiuscole dei nomi.Per qualche ragione lo spagnolo e il francese sembrano restituire sempre nomi che iniziano con una lettera minuscola.

È stato utile?

Soluzione

Non tutte le lingue condividono le regole per l'uso delle maiuscole in inglese.Immagino che dovresti modificare i dati utilizzati dall'API, ma i tuoi clienti non inglesi potrebbero non apprezzarlo...

about.com sulle maiuscole francesi

Altri suggerimenti

Le regole per l'uso delle maiuscole sono diverse per le diverse lingue.In francese, nomi dei mesi non dovrebbe essere maiuscolo.

Potresti non voler cambiare le maiuscole: culture diverse usano parole diverse in maiuscolo (ad esempio, in tedesco si scrive in maiuscolo ogni sostantivo, non solo i nomi propri).

tl; dott

Come posso controllare le maiuscole dei nomi

Tu no.Lingue e culture diverse hanno regole diverse riguardo alle maiuscole, alla punteggiatura, alle abbreviazioni, ecc.

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. 

più febbrile

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 )

lundi

Localizzare

Come altri hanno affermato, non dovresti forzare le tue nozioni parrocchiali (inglese americano?) di capitalizzazione.Utilizza una libreria data-ora decente e lascia che venga localizzata automaticamente per te.

java.time

Stai utilizzando terribili vecchie classi data-ora che ora sono legacy, soppiantate dalle classi java.time.

IL LocalDate La classe rappresenta un valore di sola data senza ora del giorno e senza fuso orario.

Il fuso orario è fondamentale per determinare una data.In ogni dato momento, la data varia in tutto il mondo in base alla zona.Ad esempio, pochi minuti dopo la mezzanotte Parigi, Francia è un nuovo giorno mentre è ancora “ieri”. Montreal, Quebec.

Specificare a nome corretto del fuso orario nel formato di continent/region, ad esempio America/Montreal, Africa/Casablanca, O Pacific/Auckland.Non utilizzare mai l'abbreviazione di 3-4 lettere come EST O IST come sono non fusi orari reali, non standardizzati e nemmeno unici (!).

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

Per lavorare con un mese, estrai a Month oggetto enum.Idem per il giorno della settimana, DayOfWeek.

Chiamata getDisplayName.Passare un TextStyle per abbreviazione.Passare un Locale determinare (a) la lingua umana per la traduzione del nome del giorno, del nome del mese e simili, e (b) le norme culturali che decidono questioni di abbreviazione, maiuscole, punteggiatura, separatori e simili.Notare che Locale ha Niente a che fare con il fuso orario.

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

…E…

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

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

Di java.time

IL java.time framework è integrato in Java 8 e versioni successive.Queste classi soppiantano quelle vecchie e fastidiose eredità classi data-ora come java.util.Date, Calendar, & SimpleDateFormat.

IL Joda-Time progetto, ora in Modalità di manutenzione, consiglia la migrazione al java.time classi.

Per saperne di più, vedere il Tutorial sull'Oracolo.E cerca Stack Overflow per molti esempi e spiegazioni.La specifica è JSR310.

Con un driver JDBC rispettare JDBC4.2 o più tardi, puoi scambiare java.time oggetti direttamente con il tuo database.Non sono necessarie stringhe o classi java.sql.*.

Dove ottenere le classi java.time?

  • JavaSE8, JavaSE9, e più tardi
    • Integrato.
    • Parte dell'API Java standard con un'implementazione in bundle.
    • Java 9 aggiunge alcune funzionalità e correzioni minori.
  • JavaSE6 E JavaSE7
    • Gran parte della funzionalità java.time è retroportata su Java 6 e 7 in ThreeTen-Backport.
  • Androide
    • Versioni successive delle implementazioni dei bundle Android delle classi java.time.
    • Per le versioni precedenti di Android, il TredieciABP il progetto si adatta ThreeTen-Backport (menzionato sopra).Vedere Come utilizzare ThreeTenABP….

IL Tredieci-Extra il progetto estende java.time con classi aggiuntive.Questo progetto è un banco di prova per possibili future aggiunte a java.time.Potresti trovare alcune classi utili qui come Interval, YearWeek, YearQuarter, E Di più.

Adesso ho un problema con il punto in cui una frase inizia con "dimanche 07 mars", che non avrebbe importanza se non fosse all'inizio di una frase.Immagino che questo non possa essere modificato, a meno che non esegua la manipolazione manuale della stringa sul primo carattere della stringa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top