Risposte:
Utilizzare la classe Java DateFormat standard.
Ad esempio, per visualizzare la data e l'ora correnti, procedi come segue:
Date date = new Date(location.getTime());
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
È possibile inizializzare un oggetto Date con i propri valori, tuttavia è necessario tenere presente che i costruttori sono stati deprecati e si dovrebbe realmente utilizzare un oggetto Calendario Java.
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
la data di ritorno Formatta è di tipo java.text.DateFormat
(e NON android.text.format.DateFormat
)
Secondo me, android.text.format.DateFormat.getDateFormat(context)
mi confonde perché questo metodo restituisce java.text.DateFormat
piuttosto che android.text.format.DateFormat
- - ".
Quindi, uso il codice del frammento come di seguito per ottenere la data / ora corrente nel mio formato.
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());
Inoltre, puoi utilizzare altri formati. Segui DateFormat .
hh:mm:ss
ti darà 01:00:00
per le 13:00, dovrai usare kk:mm:ss
per ottenere13:00:00
k
è ora del giorno (1-24), non intendi H
, che è l'ora del giorno (0-23), ad es. HH: mm: ss? Vedi: developer.android.com/reference/java/text/SimpleDateFormat.html
java.text.SimpleDateFormat
(cosa hai collegato e usa H
per ore nell'intervallo 0-23) e android.text.format.DateFormat
(di cosa tratta la risposta e usa k
per ore nell'intervallo 0-23)
k
documentazione per DateFormat
stati chiaramente Per la documentazione canonica delle stringhe di formato, vedere SimpleDateFormat. Molto confuso. Oppure mi sfugge qualcosa?
È possibile utilizzare DateFormat
. Il risultato dipende dalle impostazioni internazionali predefinite del telefono, ma è possibile specificare anche le impostazioni internazionali:
https://developer.android.com/reference/java/text/DateFormat.html
Questo è i risultati su a
DateFormat.getDateInstance().format(date)
FR Locale: 3 nov. 2017
US / En Locale: 12 gennaio 1952
DateFormat.getDateInstance(DateFormat.SHORT).format(date)
Locale FR: 03/11/2017
Impostazioni locali US / En: 12.13.52
DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)
FR Locale: 3 nov. 2017
US / En Locale: 12 gennaio 1952
DateFormat.getDateInstance(DateFormat.LONG).format(date)
FR Locale: 3 novembre 2017
US / En Locale: 12 gennaio 1952
DateFormat.getDateInstance(DateFormat.FULL).format(date)
FR Locale: vendredi 3 novembre 2017
US / En Locale: martedì 12 aprile 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 Locale: 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)
Locale FR: 16:04:58
DateFormat.getTimeInstance(DateFormat.SHORT).format(date)
Locale FR: 16:04
DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date)
Locale FR: 16:04:58
DateFormat.getTimeInstance(DateFormat.LONG).format(date)
FR Impostazioni locali: 16:04:58 GMT + 01: 00
DateFormat.getTimeInstance(DateFormat.FULL).format(date)
FR Locale: 16:04:58 heure normale d'Europe centrale
Stringa di data da data a locale:
Date date = new Date();
String stringDate = DateFormat.getDateTimeInstance().format(date);
Opzioni:
DateFormat.getDateInstance()
-> 31 dic 1969
DateFormat.getDateTimeInstance()
-> 31 dic 1969, 16:00
DateFormat.getTimeInstance()
-> 16:00:00
Questo lo farà:
Date date = new Date();
java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
Usa SimpleDateFormat
Come questo:
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());
Di seguito: http://developer.android.com/reference/android/text/format/Time.html
È meglio utilizzare la classe temporale nativa di Android:
Time now = new Time();
now.setToNow();
Quindi formatta:
Log.d("DEBUG", "Time "+now.format("%d.%m.%Y %H.%M.%S"));
Usa questi due come variabili di classe:
public java.text.DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
private Calendar mDate = null;
E usalo in questo modo:
mDate = Calendar.getInstance();
mDate.set(year,months,day);
dateFormat.format(mDate.getTime());
Questo è il mio metodo, è possibile definire e inserire e produrre il formato.
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;
}
Uso SimpleDateFormat senza modello personalizzato per ottenere la data e l'ora effettive dal sistema nel formato preselezionato del dispositivo :
public static String getFormattedDate() {
//SimpleDateFormat called without pattern
return new SimpleDateFormat().format(Calendar.getInstance().getTime());
}
ritorna :
Usa build nella 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"));
Le altre risposte sono generalmente corrette. Vorrei contribuire con la risposta moderna. Le classi Date
, DateFormat
e SimpleDateFormat
utilizzate nella maggior parte delle altre risposte, sono obsolete da tempo e hanno causato problemi a molti programmatori nel corso di molti anni. Oggi abbiamo molto meglio java.time
, AKA JSR-310, la moderna API Java data e ora. Puoi usarlo ancora su Android? Più probabilmente! Le classi moderne sono state trasferite su Android nel progetto ThreeTenABP. Vedi questa domanda: Come usare ThreeTenABP in Progetto Android per tutti i dettagli.
Questo frammento dovrebbe iniziare:
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));
Quando imposto la lingua preferita del mio computer su inglese americano o inglese britannico, questo stampa:
Sep 28, 2017 10:45:00 PM
Quando invece l'ho impostato su Danese, ottengo:
28-09-2017 22:45:00
Quindi segue la configurazione. Non sono sicuro di quale dettaglio segua le impostazioni di data e ora del tuo dispositivo, e questo può variare da telefono a telefono.
Questo codice funziona per me!
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();
Per ottenere la data o l'ora in formato locale da millisecondi ho usato questo:
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);
Puoi utilizzare altri stili di data e ora. Maggiori informazioni sugli stili qui .
Modo più breve:
// 2019-03-29 16:11
String.format("%1$tY-%<tm-%<td %<tR", Calendar.getInstance())
%tR
è l'abbreviazione di %tH:%tM
, <
significa riutilizzare l'ultimo parametro ( 1$
).
È equivalente a String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM", Calendar.getInstance())
https://developer.android.com/reference/java/util/Formatter.html
Provare:
event.putExtra("startTime", "10/05/2012");
E quando accedi alle variabili passate:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(bundle.getString("startTime"));
Lo uso così:
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 e .Calendar e SimpleDateFormat in Java (e Android) sono notoriamente problematici. Evitali. Sono così cattivi che Sun / Oracle hanno rinunciato a loro, soppiantandoli con il nuovo pacchetto java.time in Java 8 (non in Android dal 2014). Il nuovo è java.time
stato ispirato dal Joda-Time biblioteca di .
Joda-Time funziona su Android.
Cerca StackOverflow per "Joda" per trovare molti esempi e molte discussioni.
Un bocconcino di codice sorgente usando Joda-Time 2.4.
Formato 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.
Formato localizzato.
String output = DateTimeFormat.forStyle( "FF" ).print( DateTime.now() );
// Full (long) format localized for this user's language and culture.
Torna al 2016, quando voglio personalizzare il formato (non in base alla configurazione del dispositivo, come mi chiedi ...) Di solito uso il file di risorse della stringa:
in strings.xml:
<string name="myDateFormat"><xliff:g id="myDateFormat">%1$td/%1$tm/%1$tY</xliff:g></string>
In attività:
Log.d(TAG, "my custom date format: "+getString(R.string.myDateFormat, new Date()));
Ciò è utile anche con il rilascio della nuova libreria di rilegatura della data .
Quindi posso avere qualcosa del genere nel file di layout:
<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"
/>
E in classe Java:
MovieDetailViewModel vm = new MovieDetailViewModel();
vm.setReleaseDate(new Date());
La classe Time di Android offre 3 metodi di formattazione http://developer.android.com/reference/android/text/format/Time.html
Ecco come l'ho fatto:
/**
* 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;
}
Spero sia utile :-)
È troppo tardi ma può aiutare qualcuno
DateFormat.format(format, timeInMillis);
ecco di format
che formato hai bisogno
es: "HH: mm" restituisce 15:30