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.
6 réponses
Utiliser android.text.format.DateFormat.getTimeFormat()
Ref: http://developer.android.com/reference/android/text/format/DateFormat.html
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 Troisetenabp le projet s'adapte ThreeTen-Backport (mentionné ci-dessus) pour Android en particulier.
- Voir Comment utiliser....
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.
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
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
.
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;
}
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