Formatage de la Date et de l'heure en fonction des paramètres régionaux

Je suis nouveau dans le développement Java et Android, donc cela pourrait être une question stupide, mais je cherche depuis des jours maintenant et je ne trouve pas de solution:

J'essaie de sortir un java.util.Date en fonction des paramètres régionaux de l'utilisateur.

La recherche sur StackOverflow m'amène à ceci:

java.util.Date date = new Date();
String dateString = DateFormat.getDateFormat(getApplicationContext()).format(date);

Cette sortie:

20/02/2011

Sur mon téléphone Français localisé. Presque bien.

Comment puis-je également afficher les partiesheures, minutes et secondes du Date, en utilisant les paramètres régionaux de l'utilisateur ? J'ai j'ai regardé dans la documentation android mais je n'ai rien trouvé.

Merci beaucoup.

26
demandé sur ereOn 2011-02-20 21:03:23

6 réponses

Utiliser android.text.format.DateFormat.getTimeFormat()

Ref: http://developer.android.com/reference/android/text/format/DateFormat.html

29
répondu Tiago 2014-05-21 10:27:09

Tl; dr

ZonedDateTime.now( ZoneId.of( "Asia/Kolkata" ) )
             .format( DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL ).withLocale ( Locale.FRENCH ) )

Java.temps

Le code de la Question utilise d'anciennes classes date-heure gênantes, maintenant héritées, supplantées par java.classes de temps intégrées à Java 8 et versions ultérieures.

Les paramètres régionaux et le fuseau horaire n'ont rien à voir l'un avec l'autre. Locale détermine le langage humain et les normes culturelles utilisées lors de la génération d'une chaîne pour représenter une valeur date-heure. Le fuseau horaire détermine l'heure de l'horloge murale d'une région particulière utilisée pour représenter un moment sur TIMELINE.

Le Instant la classe représente un moment dans le scénario de UTC, avec une résolution de nanosecondes (jusqu'à neuf (9) chiffres d'une fraction décimale).

Instant instant = Instant.now();

2016-10-12T07: 21: 00.264 Z

Appliquer un fuseau horaire pour obtenir un ZonedDateTime. Je choisis arbitrairement de montrer ce moment en utilisant le fuseau horaire de L'Inde. Même moment, même point sur la ligne de temps.

ZoneId z = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdt = instant.atZone( z );

2016-10-12T12:51: 00.264 + 05: 30 [Asie / Kolkata]

Générer une chaîne en utilisant les paramètres régionaux de Québec Canada. Laissez java.temps localiser automatiquement la chaîne.

Locale l = Locale.CANADA_FRENCH;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL ).withLocale ( l );
String output = zdt.format ( f );  // Indian time zone with Québécois presentation/translation.

Mercredi 12 octobre 2016 12 h 51 IST


À propos de java.temps

Le java.le framework time est intégré à Java 8 et versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date-heure classes telles que java.util.Date, .Calendar, & java.text.SimpleDateFormat.

Le projetJoda-Time , maintenant en mode de maintenance , conseille la migration vers java.temps.

Pour en savoir plus, consultez le tutoriel Oracle. Et recherchez le débordement de pile pour de nombreux exemples et explications. La spécification est JSR 310 .

Où obtenir le java.les classes de temps?

  • Java SE 8 et SE 9 et plus tard
    • intégré.
    • partie de L'API Java standard avec une implémentation groupée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et SE 7
    • une grande partie de java.la fonctionnalité time est de nouveau portée sur Java 6 et 7 dans ThreeTen-Backport.
  • Android

Le projetThreeTen-Extra étend java.temps avec des classes supplémentaires. Ce projet est un terrain d'essai pour les futurs ajouts possibles à java.temps. Vous pouvez trouver quelques classes utiles ici comme Interval, YearWeek, YearQuarter, et plus.

8
répondu Basil Bourque 2017-05-23 11:54:25

java.text.DateFormat a toutes les fonctions dont vous pourriez avoir besoin:

DateFormat.getDateInstance()

DateFormat.getTimeInstance()

Mais celui dont vous avez besoin est:

DateFormat.getDateTimeInstance() Vous pouvez également spécifier la longueur de la partie date / heure et les paramètres régionaux. Le résultat final serait:

DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT, Locale.FRENCH).format(Date);

Source: http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html

5
répondu Cristan 2014-09-12 09:23:59

DateFormat.getTimeInstance() obtient le formateur d'heure avec le style de formatage par défaut pour les paramètres régionaux par défaut. Vous pouvez également passer un style et un Locale.

3
répondu Christoph Leuzinger 2012-08-27 11:44:39
public static String formatDate(Date date, boolean withTime)
{
    String result = "";
    DateFormat dateFormat;

    if (date != null)
    {
        try
        {
            String format = Settings.System.getString(context.getContentResolver(), Settings.System.DATE_FORMAT);
            if (TextUtils.isEmpty(format))
            {
                dateFormat = android.text.format.DateFormat.getDateFormat(context);
            }
            else
            {
                dateFormat = new SimpleDateFormat(format);
            }
            result = dateFormat.format(date);

            if (withTime)
            {
                dateFormat = android.text.format.DateFormat.getTimeFormat(context);
                result += " " + dateFormat.format(date);
            }
        }
        catch (Exception e)
        {
        }
    }

    return result;
}
1
répondu Ivan Kocic 2012-12-10 20:57:01

Si vous voulez les heures secondes et milli secondes des paramètres régionaux actuels, utilisez Calendar.getInstance ().getTime() vous donnera l'heure des paramètres régionaux actuels

-3
répondu Dead Programmer 2011-02-20 19:39:55