Réponses:
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, mais vous devez savoir que les constructeurs sont obsolètes et que vous devez vraiment utiliser un objet Java Calendar.
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
la dateFormat retournée est de type java.text.DateFormat
(et NON android.text.format.DateFormat
)
À mon avis, android.text.format.DateFormat.getDateFormat(context)
cela 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 .
hh:mm:ss
cela vous donnera 01:00:00
pour 13 heures, vous devrez utiliser kk:mm:ss
pour obtenir13:00:00
k
est une heure dans la journée (1-24), ne voulez-vous pas dire H
, qui est une heure dans la journée (0-23), par exemple. HH: mm: ss? Voir: developer.android.com/reference/java/text/SimpleDateFormat.html
java.text.SimpleDateFormat
(ce que vous avez lié et utilisé H
pendant des heures dans la plage 0-23) et android.text.format.DateFormat
(ce que la réponse concerne et utilise k
pendant des heures dans la plage 0-23)
k
, cependant, la documentation DateFormat
indique clairement Pour la documentation canonique des chaînes de format, voir SimpleDateFormat. Très perturbant. Ou est-ce que je manque quelque chose?
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
Il s'agit de résultats sur un
DateFormat.getDateInstance().format(date)
FR Locale: 3 nov. 2017
US / En Locale: 12 janv.1952
DateFormat.getDateInstance(DateFormat.SHORT).format(date)
FR Paramètres régionaux: 03/11/2017
US / En Locale: 12.13.52
DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)
FR Locale: 3 nov. 2017
US / En Locale: 12 janv.1952
DateFormat.getDateInstance(DateFormat.LONG).format(date)
FR Paramètres régionaux: 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 Paramètres régionaux: 03/11/2017 16:04
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(date)
FR Paramètres régionaux: 03/11/2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG).format(date)
FR Paramètres régionaux: 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 Paramètres régionaux: 16:04:58
DateFormat.getTimeInstance(DateFormat.SHORT).format(date)
FR Paramètres régionaux: 16:04
DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date)
FR Paramètres régionaux: 16:04:58
DateFormat.getTimeInstance(DateFormat.LONG).format(date)
FR Paramètres régionaux: 16:04:58 GMT + 01: 00
DateFormat.getTimeInstance(DateFormat.FULL).format(date)
FR Locale: 16:04:58 heure normale d'Europe centrale
Date à Locale chaîne de date:
Date date = new Date();
String stringDate = DateFormat.getDateTimeInstance().format(date);
Options:
DateFormat.getDateInstance()
-> 31 déc.1969
DateFormat.getDateTimeInstance()
-> 31 déc.1969 16:00:00
DateFormat.getTimeInstance()
-> 16 h 00
Cela le fera:
Date date = new Date();
java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
Utilisez SimpleDateFormat
Comme ça:
event.putExtra("starttime", "12/18/2012");
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
Date date = format.parse(bundle.getString("starttime"));
new SimpleDateFormat("my-format", Locale.getDefault());
Suite à 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 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());
Ceci est ma méthode, vous pouvez définir et formater 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;
}
J'utilise SimpleDateFormat sans modèle personnalisé pour obtenir la date et l'heure réelles du système dans le format présélectionné de l'appareil :
public static String getFormattedDate() {
//SimpleDateFormat called without pattern
return new SimpleDateFormat().format(Calendar.getInstance().getTime());
}
renvoie :
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"));
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 obsolètes depuis longtemps et ont causé des problèmes à de nombreux programmeurs pendant de nombreuses années. Aujourd'hui, nous avons tellement mieux dans java.time
, AKA JSR-310, l'API Java date et heure moderne. Pouvez-vous encore l'utiliser sur Android? Certainement! Les classes modernes ont été rétroportées vers Android dans le projet ThreeTenABP. Voir cette question: Comment utiliser ThreeTenABP dans Android Project 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 sur l'anglais américain ou l'anglais britannique, ceci s'imprime:
Sep 28, 2017 10:45:00 PM
Au lieu de cela, je le mets en danois,
28-09-2017 22:45:00
Il suit donc la configuration. Je ne sais pas exactement à quel détail il suit les paramètres de date et d'heure de votre appareil, et cela peut varier d'un téléphone à l'autre.
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();
Pour obtenir la date ou l'heure au format local à partir des 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 d'heure. Plus d'informations sur les styles ici .
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
Essayer:
event.putExtra("startTime", "10/05/2012");
Et lorsque vous accédez à des variables passées:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(bundle.getString("startTime"));
Je l'utilise comme ceci:
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;
}
}
Java.util.Date et .Calendar et SimpleDateFormat en Java (et Android) sont notoirement gênants. Évite-les. Ils sont si mauvais que Sun / Oracle les a abandonnés, les supplantant avec le nouveau package java.time en Java 8 (pas dans Android en 2014). Le nouveau java.time
s'inspire de la bibliothèque Joda-Time .
Joda-Time fonctionne sur Android.
Recherchez StackOverflow pour "Joda" pour trouver de nombreux exemples et de nombreuses discussions.
Un petit morceau 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.
Retour à 2016, lorsque je souhaite personnaliser le format (pas en fonction de la configuration de l'appareil, comme vous le demandez ...) j'utilise généralement le fichier de ressource 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()));
Cela est également utile avec la sortie de la nouvelle bibliothèque de liaison de dates .
Je peux donc 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());
La classe de temps Android propose 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);
voici le format
format dont vous avez besoin
ex: "HH: mm" renvoie 15:30