Comment formater correctement, en fonction de la configuration de l'appareil, une date et une heure avec l'année, le mois, le jour, l'heure et les minutes?
Utilisez la classe Java DateFormat standard.
Par exemple, pour afficher la date et l'heure actuelles, procédez comme suit:
Date date = new Date(location.getTime());
DateFormat dateFormat = Android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
Vous pouvez initialiser un objet Date avec vos propres valeurs. Cependant, vous devez savoir que les constructeurs sont obsolètes et utiliser un objet Calendrier Java.
À mon avis, Android.text.format.DateFormat.getDateFormat(context)
me rend confus, car cette méthode renvoie Java.text.DateFormat
plutôt que Android.text.format.DateFormat
- - ".
Donc, j'utilise le code de fragment comme ci-dessous pour obtenir la date/heure actuelle dans mon format.
Android.text.format.DateFormat df = new Android.text.format.DateFormat();
df.format("yyyy-MM-dd hh:mm:ss a", new Java.util.Date());
or
Android.text.format.DateFormat.format("yyyy-MM-dd hh:mm:ss a", new Java.util.Date());
De plus, vous pouvez utiliser d'autres formats. Suivez DateFormat.
Vous pouvez utiliser DateFormat
. Le résultat dépend des paramètres régionaux par défaut du téléphone, mais vous pouvez également spécifier les paramètres régionaux:
https://developer.Android.com/reference/Java/text/DateFormat.html
Ceci est des résultats sur
DateFormat.getDateInstance().format(date)
FR Locale: 3 nov. 2017
US/En langue: 12 janvier 1952
DateFormat.getDateInstance(DateFormat.SHORT).format(date)
FR Langue: 03/11/2017
Langue US/En: 12.13.52
DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)
FR Locale: 3 nov. 2017
US/En langue: 12 janvier 1952
DateFormat.getDateInstance(DateFormat.LONG).format(date)
FR Locale: 3 novembre 2017
US/En Locale: 12 janvier 1952
DateFormat.getDateInstance(DateFormat.FULL).format(date)
FR Locale: vendredi 3 novembre 2017
US/En Locale: mardi 12 avril 1952
DateFormat.getDateTimeInstance().format(date)
FR Locale: 3 nov. 2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date)
FR Locale: 03/11/2017 16:04
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(date)
FR Locale: 03/11/2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG).format(date)
FR Langue: 03/11/2017 16:04:58 GMT + 01: 00
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL).format(date)
FR Locale: 03/11/2017 16:04:58 heure normale d’Europe centrale
DateFormat.getTimeInstance().format(date)
FR Locale: 16:04:58
DateFormat.getTimeInstance(DateFormat.SHORT).format(date)
FR Locale: 16:04
DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date)
FR Locale: 16:04:58
DateFormat.getTimeInstance(DateFormat.LONG).format(date)
Langue locale: 16:04:58 GMT + 01: 00
DateFormat.getTimeInstance(DateFormat.FULL).format(date)
FR Locale: 16:04:58 heure normale d’Europe centrale
Date to Locale date string:
Date date = new Date();
String stringDate = DateFormat.getDateTimeInstance().format(date);
Options:
DateFormat.getDateInstance()
-> 31 décembre 1969
DateFormat.getDateTimeInstance()
-> 31 décembre 1969 à 16h00
DateFormat.getTimeInstance()
-> 16h00
Cela va le faire:
Date date = new Date();
Java.text.DateFormat dateFormat = Android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
Après ceci: http://developer.Android.com/reference/Android/text/format/Time.html
Est préférable d'utiliser la classe Time native Android:
Time now = new Time();
now.setToNow();
Puis formatez:
Log.d("DEBUG", "Time "+now.format("%d.%m.%Y %H.%M.%S"));
Utilisez SimpleDateFormat
Comme ça:
event.putExtra("starttime", "12/18/2012");
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
Date date = format.parse(bundle.getString("starttime"));
J'utilise SimpleDateFormat sans modèle personnalisé pour obtenir la date et l'heure réelles du système dans le périphérique présélectionné format:
public static String getFormattedDate() {
//SimpleDateFormat called without pattern
return new SimpleDateFormat().format(Calendar.getInstance().getTime());
}
résultats :
Ceci est ma méthode, vous pouvez définir et le format d'entrée et de sortie.
public static String formattedDateFromString(String inputFormat, String outputFormat, String inputDate){
if(inputFormat.equals("")){ // if inputFormat = "", set a default input format.
inputFormat = "yyyy-MM-dd hh:mm:ss";
}
if(outputFormat.equals("")){
outputFormat = "EEEE d 'de' MMMM 'del' yyyy"; // if inputFormat = "", set a default output format.
}
Date parsed = null;
String outputDate = "";
SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, Java.util.Locale.getDefault());
SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, Java.util.Locale.getDefault());
// You can set a different Locale, This example set a locale of Country Mexico.
//SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, new Locale("es", "MX"));
//SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, new Locale("es", "MX"));
try {
parsed = df_input.parse(inputDate);
outputDate = df_output.format(parsed);
} catch (Exception e) {
Log.e("formattedDateFromString", "Exception in formateDateFromstring(): " + e.getMessage());
}
return outputDate;
}
Utilisez ces deux comme variables de classe:
public Java.text.DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
private Calendar mDate = null;
Et utilisez-le comme ceci:
mDate = Calendar.getInstance();
mDate.set(year,months,day);
dateFormat.format(mDate.getTime());
Utilisez la construction dans la classe Time!
Time time = new Time();
time.set(0, 0, 17, 4, 5, 1999);
Log.i("DateTime", time.format("%d.%m.%Y %H:%M:%S"));
Ce code renverrait la date et l'heure actuelles:
public String getCurrDate()
{
String dt;
Date cal = Calendar.getInstance().getTime();
dt = cal.toLocaleString();
return dt;
}
Ce code fonctionne pour moi!
Date d = new Date();
CharSequence s = Android.text.format.DateFormat.format("MM-dd-yy hh-mm-ss",d.getTime());
Toast.makeText(this,s.toString(),Toast.LENGTH_SHORT).show();
Les autres réponses sont généralement correctes. Je voudrais apporter la réponse moderne. Les classes Date
, DateFormat
et SimpleDateFormat
utilisées dans la plupart des autres réponses sont périmées depuis longtemps et ont causé des problèmes à de nombreux programmeurs pendant de nombreuses années. Aujourd'hui, nous avons tellement mieux avec Java.time
, AKA JSR-310, l'API Java moderne pour la date et l'heure. Pouvez-vous utiliser cela sur Android encore? Certainement! Les classes modernes ont été rétroportées sur Android dans le projet ThreeTenABP. Voir cette question: Comment utiliser ThreeTenABP dans un projet Android pour tous les détails.
Cet extrait devrait vous aider à démarrer:
int year = 2017, month = 9, day = 28, hour = 22, minute = 45;
LocalDateTime dateTime = LocalDateTime.of(year, month, day, hour, minute);
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
System.out.println(dateTime.format(formatter));
Lorsque je règle la langue préférée de mon ordinateur en anglais américain ou anglais britannique, les informations suivantes sont imprimées:
Sep 28, 2017 10:45:00 PM
Quand au lieu de cela je le configure en danois, je reçois:
28-09-2017 22:45:00
Donc, il suit la configuration. Je ne sais pas exactement à quel niveau de détail il suit les paramètres de date et d’heure de votre appareil, ce qui peut varier d’un téléphone à l’autre.
Je l'utilise comme ça:
public class DateUtils {
static DateUtils instance;
private final DateFormat dateFormat;
private final DateFormat timeFormat;
private DateUtils() {
dateFormat = Android.text.format.DateFormat.getDateFormat(MainApplication.context);
timeFormat = Android.text.format.DateFormat.getTimeFormat(MainApplication.context);
}
public static DateUtils getInstance() {
if (instance == null) {
instance = new DateUtils();
}
return instance;
}
public synchronized static String formatDateTime(long timestamp) {
long milliseconds = timestamp * 1000;
Date dateTime = new Date(milliseconds);
String date = getInstance().dateFormat.format(dateTime);
String time = getInstance().timeFormat.format(dateTime);
return date + " " + time;
}
}
Essayer:
event.putExtra("startTime", "10/05/2012");
Et quand vous accédez aux variables passées:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(bundle.getString("startTime"));
Retour à 2016, lorsque je veux personnaliser le format (pas en fonction de la configuration de l'appareil, comme vous le demandez ...), j'utilise généralement le fichier de ressources de chaîne:
dans strings.xml:
<string name="myDateFormat"><xliff:g id="myDateFormat">%1$td/%1$tm/%1$tY</xliff:g></string>
En activité:
Log.d(TAG, "my custom date format: "+getString(R.string.myDateFormat, new Date()));
Ceci est également utile lors de la publication de la nouvelle bibliothèque Date Binding Library .
Donc, je peux avoir quelque chose comme ça dans le fichier de mise en page:
<TextView
Android:id="@+id/text_release_date"
Android:layout_width="wrap_content"
Android:layout_height="0dp"
Android:layout_weight="1"
Android:padding="2dp"
Android:text="@{@string/myDateFormat(vm.releaseDate)}"
tools:text="0000"
/>
Et en classe Java:
MovieDetailViewModel vm = new MovieDetailViewModel();
vm.setReleaseDate(new Date());
Chemin le plus court:
// 2019-03-29 16:11
String.format("%1$tY-%<tm-%<td %<tR", Calendar.getInstance())
%tR
est l'abréviation de %tH:%tM
, <
signifie réutiliser le dernier paramètre (1$
).
C'est équivalent à String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM", Calendar.getInstance())
https://developer.Android.com/reference/Java/util/Formatter.html
Java.util.Date et .Calendar et SimpleDateFormat en Java (et Android) sont notoirement gênants. Évite-les. Ils sont tellement mauvais que Sun/Oracle les ont abandonnés, les supplantant avec le nouveau package Java.time dans Java 8 (pas dans Android depuis 2014). Le nouveau Java.time
a été inspiré par la bibliothèque Joda-Time .
Joda-Time fonctionne sous Android.
Recherchez "Joda" dans StackOverflow pour trouver de nombreux exemples et de nombreuses discussions.
Un fragment de code source utilisant Joda-Time 2.4.
Format standard.
String output = DateTime.now().toString();
// Current date-time in user's default time zone with a String representation formatted to the ISO 8601 standard.
Format localisé.
String output = DateTimeFormat.forStyle( "FF" ).print( DateTime.now() );
// Full (long) format localized for this user's language and culture.
La classe Android Time fournit 3 méthodes de formatage http://developer.Android.com/reference/Android/text/format/Time.html
Voici comment je l'ai fait:
/**
* This method will format the data from the Android Time class (eg. myTime.setToNow()) into the format
* Date: dd.mm.yy Time: hh.mm.ss
*/
private String formatTime(String time)
{
String fullTime= "";
String[] sa = new String[2];
if(time.length()>1)
{
Time t = new Time(Time.getCurrentTimezone());
t.parse(time);
// or t.setToNow();
String formattedTime = t.format("%d.%m.%Y %H.%M.%S");
int x = 0;
for(String s : formattedTime.split("\\s",2))
{
System.out.println("Value = " + s);
sa[x] = s;
x++;
}
fullTime = "Date: " + sa[0] + " Time: " + sa[1];
}
else{
fullTime = "No time data";
}
return fullTime;
}
J'espère que c'est utile :-)
C'est trop tard mais ça peut aider quelqu'un
DateFormat.format(format, timeInMillis);
ici format
est le format dont vous avez besoin
ex: "HH: mm" retourne à 15h30
Pour obtenir la date ou l'heure au format local de millisecondes, j'ai utilisé ceci:
Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault());
dateFormat.format(date);
Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault());
dateFormat.format(date);
Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault());
dateFormat.format(date);
Vous pouvez utiliser d'autres styles de date et de temps. Plus d'infos sur les styles ici .