Antworten:
Verwenden Sie die Standard-Java-DateFormat-Klasse.
Gehen Sie beispielsweise folgendermaßen vor, um das aktuelle Datum und die aktuelle Uhrzeit anzuzeigen:
Date date = new Date(location.getTime());
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
Sie können ein Date-Objekt mit Ihren eigenen Werten initialisieren. Beachten Sie jedoch, dass die Konstruktoren veraltet sind und Sie wirklich ein Java-Kalenderobjekt verwenden sollten.
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
Das zurückgegebene DatumFormat ist vom Typ java.text.DateFormat
(und NICHT android.text.format.DateFormat
)
Meiner Meinung nach android.text.format.DateFormat.getDateFormat(context)
verwirrt mich das, weil diese Methode java.text.DateFormat
eher zurückgibt als android.text.format.DateFormat
- - ".
Daher verwende ich den folgenden Fragmentcode, um das aktuelle Datum und die aktuelle Uhrzeit in meinem Format abzurufen.
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());
Darüber hinaus können Sie andere Formate verwenden. Folgen Sie DateFormat .
hh:mm:ss
Sie auch nicht, dass Sie 01:00:00
für 1 PM erhalten, müssen Sie verwenden kk:mm:ss
, um13:00:00
k
ist Stunde am Tag (1-24), meinst du nicht H
, das ist Stunde am Tag (0-23), z. HH: mm: ss? Siehe: developer.android.com/reference/java/text/SimpleDateFormat.html
java.text.SimpleDateFormat
(was Sie verlinkt und H
für Stunden im Bereich von 0-23 verwendet) und android.text.format.DateFormat
(was die Antwort ist und k
für Stunden im Bereich von 0-23 verwendet)
k
mit der Dokumentation für DateFormat
eindeutige Zustände . Die kanonische Dokumentation von Formatzeichenfolgen finden Sie unter SimpleDateFormat. Sehr verwirrend. Oder fehlt mir etwas?
Sie können verwenden DateFormat
. Das Ergebnis hängt vom Standardgebietsschema des Telefons ab. Sie können jedoch auch das Gebietsschema angeben:
https://developer.android.com/reference/java/text/DateFormat.html
Dies ist Ergebnisse auf einem
DateFormat.getDateInstance().format(date)
FR Gebietsschema: 3. November 2017
US / En Locale: 12. Januar 1952
DateFormat.getDateInstance(DateFormat.SHORT).format(date)
FR Gebietsschema: 03/11/2017
US / En Gebietsschema: 12.13.52
DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)
FR Gebietsschema: 3. November 2017
US / En Locale: 12. Januar 1952
DateFormat.getDateInstance(DateFormat.LONG).format(date)
FR Gebietsschema: 3. November 2017
US / En Locale: 12. Januar 1952
DateFormat.getDateInstance(DateFormat.FULL).format(date)
FR Gebietsschema: vendredi 3 novembre 2017
US / En Locale: Dienstag, 12. April 1952
DateFormat.getDateTimeInstance().format(date)
FR Gebietsschema: 3. November 2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date)
FR Gebietsschema: 03/11/2017 16:04
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(date)
FR Gebietsschema: 03/11/2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG).format(date)
FR Gebietsschema: 03/11/2017 16:04:58 GMT + 01: 00
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL).format(date)
FR Gebietsschema: 03/11/2017 16:04:58 heure normale d'Europe centrale
DateFormat.getTimeInstance().format(date)
FR Gebietsschema: 16:04:58
DateFormat.getTimeInstance(DateFormat.SHORT).format(date)
FR Gebietsschema: 16:04
DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date)
FR Gebietsschema: 16:04:58
DateFormat.getTimeInstance(DateFormat.LONG).format(date)
FR Gebietsschema: 16:04:58 GMT + 01: 00
DateFormat.getTimeInstance(DateFormat.FULL).format(date)
FR Gebietsschema: 16:04:58 heure normale d'Europe centrale
Datumszeichenfolge von Datum zu Gebietsschema:
Date date = new Date();
String stringDate = DateFormat.getDateTimeInstance().format(date);
Optionen:
DateFormat.getDateInstance()
-> 31. Dezember 1969
DateFormat.getDateTimeInstance()
-> 31. Dezember 1969, 16:00:00 Uhr
DateFormat.getTimeInstance()
-> 16:00:00 Uhr
Dies wird es tun:
Date date = new Date();
java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
Verwenden Sie SimpleDateFormat
So was:
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());
Im Anschluss daran: http://developer.android.com/reference/android/text/format/Time.html
Ist es besser, die native Android-Zeitklasse zu verwenden:
Time now = new Time();
now.setToNow();
Dann formatieren:
Log.d("DEBUG", "Time "+now.format("%d.%m.%Y %H.%M.%S"));
Verwenden Sie diese beiden als Klassenvariablen:
public java.text.DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
private Calendar mDate = null;
Und benutze es so:
mDate = Calendar.getInstance();
mDate.set(year,months,day);
dateFormat.format(mDate.getTime());
Dies ist meine Methode, Sie können das Format definieren und eingeben.
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;
}
Ich verwende SimpleDateFormat ohne benutzerdefiniertes Muster , um das tatsächliche Datum und die Uhrzeit vom System im vorgewählten Format des Geräts abzurufen :
public static String getFormattedDate() {
//SimpleDateFormat called without pattern
return new SimpleDateFormat().format(Calendar.getInstance().getTime());
}
Rückgabe :
Verwenden Sie die eingebaute Zeitklasse!
Time time = new Time();
time.set(0, 0, 17, 4, 5, 1999);
Log.i("DateTime", time.format("%d.%m.%Y %H:%M:%S"));
Die anderen Antworten sind im Allgemeinen richtig. Ich möchte die moderne Antwort beitragen. Die Klassen Date
, DateFormat
und SimpleDateFormat
in den meisten anderen Antworten verwendet werden, sind lange veraltet und haben für viele Programmierer über viele Jahre hinweg verursacht Probleme. Heute haben wir viel mehr in java.time
AKA JSR-310, der modernen Java-API für Datum und Uhrzeit. Kannst du das schon auf Android benutzen? Höchstwahrscheinlich! Die modernen Klassen wurden im ThreeTenABP-Projekt auf Android zurückportiert. Weitere Informationen finden Sie in dieser Frage: Verwendung von ThreeTenABP in Android Project .
Mit diesem Snippet können Sie loslegen:
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));
Wenn ich die bevorzugte Sprache meines Computers auf US-Englisch oder UK-Englisch einstelle, wird Folgendes gedruckt:
Sep 28, 2017 10:45:00 PM
Wenn ich es stattdessen auf Dänisch setze, bekomme ich:
28-09-2017 22:45:00
Es folgt also der Konfiguration. Ich bin mir jedoch nicht sicher, in welchem Detail die Datums- und Uhrzeiteinstellungen Ihres Geräts eingehalten werden. Dies kann von Telefon zu Telefon unterschiedlich sein.
Dieser Code funktioniert für mich!
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();
Um Datum oder Uhrzeit im Gebietsschema von Millisekunden abzurufen, habe ich Folgendes verwendet:
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);
Sie können einen anderen Datums- und Zeitstil verwenden. Weitere Infos zu Styles hier .
Kürzester Weg:
// 2019-03-29 16:11
String.format("%1$tY-%<tm-%<td %<tR", Calendar.getInstance())
%tR
kurz ist für %tH:%tM
, <
Mittel letzte Parameter wiederzuverwenden ( 1$
).
Es ist äquivalent zu String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM", Calendar.getInstance())
https://developer.android.com/reference/java/util/Formatter.html
Versuchen:
event.putExtra("startTime", "10/05/2012");
Und wenn Sie auf übergebene Variablen zugreifen:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(bundle.getString("startTime"));
Ich benutze es so:
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 und .Calendar sowie SimpleDateFormat in Java (und Android) sind bekanntermaßen problematisch. Vermeide sie. Sie sind so schlecht, dass Sun / Oracle sie aufgegeben hat und sie durch das neue Paket java.time in Java 8 ersetzt hat (ab 2014 nicht in Android). Das Neue java.time
wurde von der Joda-Time- Bibliothek inspiriert .
Joda-Time funktioniert in Android.
Durchsuchen Sie StackOverflow nach "Joda", um viele Beispiele und Diskussionen zu finden.
Ein bisschen Quellcode mit Joda-Time 2.4.
Standardformat.
String output = DateTime.now().toString();
// Current date-time in user's default time zone with a String representation formatted to the ISO 8601 standard.
Lokalisiertes Format.
String output = DateTimeFormat.forStyle( "FF" ).print( DateTime.now() );
// Full (long) format localized for this user's language and culture.
Zurück zum Jahr 2016, wenn ich das Format anpassen möchte (nicht entsprechend der Gerätekonfiguration, wie Sie fragen ...), verwende ich normalerweise die String-Ressourcendatei:
in strings.xml:
<string name="myDateFormat"><xliff:g id="myDateFormat">%1$td/%1$tm/%1$tY</xliff:g></string>
In Aktivität:
Log.d(TAG, "my custom date format: "+getString(R.string.myDateFormat, new Date()));
Dies ist auch bei der Veröffentlichung der neuen Datumsbindungsbibliothek hilfreich .
So kann ich so etwas in der Layoutdatei haben:
<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"
/>
Und in der Java-Klasse:
MovieDetailViewModel vm = new MovieDetailViewModel();
vm.setReleaseDate(new Date());
Die Android-Zeitklasse bietet drei Formatierungsmethoden: http://developer.android.com/reference/android/text/format/Time.html
So habe ich es gemacht:
/**
* 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;
}
Ich hoffe das ist hilfreich :-)
Es ist zu spät, aber es kann jemandem helfen
DateFormat.format(format, timeInMillis);
Hier format
ist das Format, das Sie benötigen
Beispiel: "HH: mm" gibt 15:30 zurück