Jawaban:
Gunakan kelas Java DateFormat standar.
Misalnya untuk menampilkan tanggal dan waktu saat ini lakukan hal berikut:
Date date = new Date(location.getTime());
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
Anda dapat menginisialisasi objek Tanggal dengan nilai Anda sendiri, namun Anda harus menyadari bahwa konstruktor telah usang dan Anda benar-benar harus menggunakan objek Kalender Java.
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
DateFormat yang dikembalikan bertipe java.text.DateFormat
(dan BUKAN android.text.format.DateFormat
)
Menurut pendapat saya, android.text.format.DateFormat.getDateFormat(context)
membuat saya bingung karena metode ini mengembalikan java.text.DateFormat
daripada android.text.format.DateFormat
- - ".
Jadi, saya menggunakan kode fragmen seperti di bawah ini untuk mendapatkan tanggal / waktu saat ini dalam format saya.
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());
Selain itu, Anda dapat menggunakan format lain. Ikuti DateFormat .
hh:mm:ss
akan memberi Anda 01:00:00
untuk 1 PM, Anda harus menggunakan kk:mm:ss
untuk mendapatkan13:00:00
k
adalah jam dalam sehari (1-24), maksud Anda H
, yaitu jam dalam hari (0-23), mis. HH: mm: dd? Lihat: developer.android.com/reference/java/text/SimpleDateFormat.html
java.text.SimpleDateFormat
(apa yang Anda tautkan dan gunakan H
selama berjam-jam dalam rentang 0-23) dan android.text.format.DateFormat
(apa jawabannya dan gunakan k
selama berjam-jam dalam rentang 0-23)
k
, namun, dokumentasi untuk DateFormat
status yang jelas. Untuk dokumentasi kanonik dari string format, lihat SimpleDateFormat. Sangat membingungkan. Atau apakah saya melewatkan sesuatu?
Anda bisa menggunakannya DateFormat
. Hasil tergantung pada Lokal default ponsel, tetapi Anda juga dapat menentukan Lokal:
https://developer.android.com/reference/java/text/DateFormat.html
Ini adalah hasil pada a
DateFormat.getDateInstance().format(date)
FR Lokal: 3 nov. 2017
Lokal AS / En: 12 Januari 1952
DateFormat.getDateInstance(DateFormat.SHORT).format(date)
FR Lokal: 03/11/2017
Lokal AS / En: 12.13.52
DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)
FR Lokal: 3 nov. 2017
Lokal AS / En: 12 Januari 1952
DateFormat.getDateInstance(DateFormat.LONG).format(date)
FR Lokal: 3 November 2017
Lokal AS / En: 12 Januari 1952
DateFormat.getDateInstance(DateFormat.FULL).format(date)
FR Lokal: vendredi 3 novembre 2017
Lokal AS / En: Selasa, 12 April 1952
DateFormat.getDateTimeInstance().format(date)
FR Lokal: 3 nov. 2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date)
FR Lokal: 03/11/2017 16:04
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(date)
FR Lokal: 03/11/2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG).format(date)
FR Lokal: 03/11/2017 16:04:58 GMT + 01: 00
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL).format(date)
FR Lokal: 03/11/2017 16:04:58 heure normale d'Europe centrale
DateFormat.getTimeInstance().format(date)
FR Lokal: 16:04:58
DateFormat.getTimeInstance(DateFormat.SHORT).format(date)
FR Lokal: 16:04
DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date)
FR Lokal: 16:04:58
DateFormat.getTimeInstance(DateFormat.LONG).format(date)
FR Lokal: 16:04:58 GMT + 01: 00
DateFormat.getTimeInstance(DateFormat.FULL).format(date)
FR Lokal: 16:04:58 heure normale d'Europe centrale
Date to Locale date string:
Date date = new Date();
String stringDate = DateFormat.getDateTimeInstance().format(date);
Pilihan:
DateFormat.getDateInstance()
-> 31 Des 1969
DateFormat.getDateTimeInstance()
-> 31 Des 1969 4:00:00 PM
DateFormat.getTimeInstance()
-> 4:00:00 PM
Ini akan melakukannya:
Date date = new Date();
java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
Gunakan SimpleDateFormat
Seperti ini:
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());
Berikut ini: http://developer.android.com/reference/android/text/format/Time.html
Lebih baik menggunakan kelas Waktu asli Android:
Time now = new Time();
now.setToNow();
Kemudian format:
Log.d("DEBUG", "Time "+now.format("%d.%m.%Y %H.%M.%S"));
Gunakan keduanya sebagai variabel kelas:
public java.text.DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
private Calendar mDate = null;
Dan gunakan seperti ini:
mDate = Calendar.getInstance();
mDate.set(year,months,day);
dateFormat.format(mDate.getTime());
Ini adalah metode saya, Anda dapat menentukan dan memasukkan serta menampilkan format.
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;
}
Saya menggunakan SimpleDateFormat tanpa pola khusus untuk mendapatkan tanggal dan waktu aktual dari sistem dalam format yang dipilih perangkat :
public static String getFormattedDate() {
//SimpleDateFormat called without pattern
return new SimpleDateFormat().format(Calendar.getInstance().getTime());
}
pengembalian :
Gunakan build di kelas Time!
Time time = new Time();
time.set(0, 0, 17, 4, 5, 1999);
Log.i("DateTime", time.format("%d.%m.%Y %H:%M:%S"));
Jawaban lain umumnya benar. Saya ingin berkontribusi jawaban modern. Kelas-kelas Date
, DateFormat
dan SimpleDateFormat
digunakan di sebagian besar jawaban lain, sudah lama ketinggalan dan telah menyebabkan masalah bagi banyak programmer selama bertahun-tahun. Hari ini kami memiliki jauh lebih baik di java.time
, AKA JSR-310, API tanggal & waktu Jawa modern. Bisakah Anda menggunakan ini di Android? Hampir dipastikan! Kelas-kelas modern telah di-backport ke Android dalam proyek ThreeTenABP. Lihat pertanyaan ini: Cara menggunakan ThreeTenABP di Android Project untuk semua detail.
Cuplikan ini akan membantu Anda memulai:
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));
Ketika saya mengatur bahasa pilihan komputer saya ke US English atau UK English, ini mencetak:
Sep 28, 2017 10:45:00 PM
Ketika sebaliknya saya mengaturnya ke Denmark, saya mendapatkan:
28-09-2017 22:45:00
Jadi tidak mengikuti konfigurasi. Saya tidak yakin persisnya detail apa yang mengikuti pengaturan tanggal dan waktu perangkat Anda, dan ini mungkin berbeda dari ponsel ke ponsel.
Kode ini berfungsi untuk saya!
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();
Untuk mendapatkan tanggal atau waktu dalam format lokal dari milidetik, saya menggunakan ini:
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);
Anda dapat menggunakan gaya tanggal dan gaya waktu lainnya. Info lebih lanjut tentang gaya di sini .
Cara terpendek:
// 2019-03-29 16:11
String.format("%1$tY-%<tm-%<td %<tR", Calendar.getInstance())
%tR
kependekan %tH:%tM
, <
artinya menggunakan kembali parameter terakhir ( 1$
).
Ini setara dengan String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM", Calendar.getInstance())
https://developer.android.com/reference/java/util/Formatter.html
Mencoba:
event.putExtra("startTime", "10/05/2012");
Dan ketika Anda mengakses variabel yang diteruskan:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(bundle.getString("startTime"));
Saya menggunakannya seperti ini:
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 dan .Calendar dan SimpleDateFormat di Java (dan Android) terkenal merepotkan. Hindari mereka. Mereka begitu buruk sehingga Sun / Oracle menyerah pada mereka, menggantikan mereka dengan paket java.time baru di Java 8 (bukan di Android pada 2014). Yang baru java.time
terinspirasi oleh perpustakaan Joda-Time .
Joda-Time bekerja di Android.
Cari StackOverflow untuk "Joda" untuk menemukan banyak contoh dan banyak diskusi.
Sebuah tidbit kode sumber menggunakan Joda-Time 2.4.
Format standar.
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 terlokalisasi.
String output = DateTimeFormat.forStyle( "FF" ).print( DateTime.now() );
// Full (long) format localized for this user's language and culture.
Kembali ke 2016, Ketika saya ingin menyesuaikan format (tidak sesuai dengan konfigurasi perangkat, seperti yang Anda tanyakan ...) Saya biasanya menggunakan file sumber string:
di strings.xml:
<string name="myDateFormat"><xliff:g id="myDateFormat">%1$td/%1$tm/%1$tY</xliff:g></string>
Dalam Aktivitas:
Log.d(TAG, "my custom date format: "+getString(R.string.myDateFormat, new Date()));
Ini juga berguna dengan rilis Perpustakaan Pengikat Tanggal baru .
Jadi saya dapat memiliki sesuatu seperti ini di file 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"
/>
Dan di kelas java:
MovieDetailViewModel vm = new MovieDetailViewModel();
vm.setReleaseDate(new Date());
Kelas Waktu android menyediakan 3 metode pemformatan http://developer.android.com/reference/android/text/format/Time.html
Beginilah cara saya melakukannya:
/**
* 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;
}
Saya harap itu membantu :-)
Sudah terlambat tetapi mungkin membantu seseorang
DateFormat.format(format, timeInMillis);
di sini format
adalah format apa yang Anda butuhkan
mis: "HH: mm" mengembalikan 15:30