+1 Ini sangat membantu. Menjadi baru, ini semua berita kecil yang kita butuhkan ... Saya menggunakan Kalender untuk mendapatkan tanggal Julian. Jauh lebih mudah daripada mendapatkan milidetik dan mencari tahu apakah nilainya sama dengan hari ini;)
Bill Mote
9
Tapi dari mana ini menarik tanggal dan waktu? pengaturan perangkat android itu sendiri?
Kyle Clegg
12
@Kyle Ya, ini didasarkan pada pengaturan waktu / zona waktu perangkat. Kutipan dari doc : "Metode getInstance Kalender mengembalikan kalender yang lokalnya didasarkan pada pengaturan sistem dan bidang waktu yang telah diinisialisasi dengan tanggal dan waktu saat ini" - (di atas baris kode kode pertama dalam dokumentasi kelas).
3
+1 solusi ini memiliki presisi milidetik, persis seperti yang saya butuhkan.
Igor Zelaya
42
Seperti yang dikatakan @adamdport, ini sebenarnya tidak menjawab pertanyaan ... Calendar.getInstance().getTime()atau Calendar.getInstance().getTimeInMillis()akan berhasil.
Kelas Time adalah pengganti yang lebih cepat untuk kelas java.util.Calendar dan java.util.GregorianCalendar. Sebuah instance dari kelas Time mewakili momen dalam waktu, ditentukan dengan ketepatan kedua.
CATATAN 1:
Sudah beberapa tahun sejak saya menulis jawaban ini, dan ini tentang kelas lama, khusus Android, dan sekarang sudah usang. Google sekarang mengatakan bahwa "[t] kelasnya memiliki sejumlah masalah dan disarankan agar GregorianCalendar digunakan sebagai gantinya".
CATATAN 2: Meskipun Timekelas memiliki toMillis(ignoreDaylightSavings)metode, ini hanyalah kenyamanan untuk berpindah ke metode yang mengharapkan waktu dalam milidetik. Nilai waktu hanya tepat untuk satu detik ; porsi milidetik selalu 000. Jika dalam satu lingkaran Anda lakukan
Time time =newTime(); time.setToNow();Log.d("TIME TEST",Long.toString(time.toMillis(false)));...do something that takes more than one millisecond, but less than one second ...
Urutan yang dihasilkan akan mengulangi nilai yang sama, seperti 1410543204000, hingga detik berikutnya dimulai, saat waktu 1410543205000akan mulai mengulangi.
@InsanityOnABun dan Muhammad Babar. Tidak tidak Tidak. Documents mengatakan "ditentukan dengan presisi kedua" Bahkan tes paling sederhana (mendapatkan waktu saat ini dalam satu lingkaran, toMillis, dan mencatat / mencetak hasilnya) akan menunjukkan kepada Anda bahwa waktu yang dihasilkan memiliki 000 sebagai bagian milidetik!
ToolmakerSteve
3
@IgorZelaya Jika Anda menginginkan akurasi milidetik, Anda mungkin melakukan pengaturan waktu interval , bukan waktu. Android docs merekomendasikan SystemClock.uptimeMillis()untuk interval waktu. Karena itulah yang digunakan sebagian besar fungsi bawaan, ada motivasi kuat untuk menerapkannya dengan baik di semua perangkat. Lihat diskusi di SystemClock ... Jika Anda ingin menghubungkannya dengan waktu dalam sehari, di aplikasi onResume, baca keduanya, dan Time / setToNow / toMillis. Ingat perbedaan di antara mereka.
> Kelas ini sudah tidak digunakan lagi di API level 22. Sebagai gantinya, gunakan GregorianCalendar. Lihat di sini
Neo
Sebenarnya, GregorianCalendartelah digantikan tahun yang lalu di Jawa dan di Android kemudian oleh kelas java.time , khususnya ZonedDateTime. Untuk Android sebelumnya, lihat proyek ThreeTen-Backport dan ThreeTenABP .
Basil Bourque
367
Jika Anda ingin mendapatkan tanggal dan waktu dalam pola tertentu, Anda dapat menggunakan yang berikut ini:
Ini akan memberi waktu dalam UTC, harus diadopsi ke zona waktu.
Andras Balázs Lajtha
10
Hati-hati, SimpleDateFormat dapat bermasalah jika kinerja merupakan masalah. Dalam aplikasi saya, saya memiliki tampilan kustom yang memiliki sekitar 20 label HH: MM yang mewakili waktu tertentu (bilangan bulat panjang memegang milidetik), dan jumlah sumber daya yang dapat ditarik yang sama. Pengujian awal menunjukkan interaksi itu tidak lancar seperti yang saya inginkan. Ketika saya memprofilkan onDraw () saya menemukan bahwa panggilan SimpleTimeFormatter mengambil 80% dari waktu. Bahkan, saya membaca halaman ini sebagai bagian dari pencarian formatter yang lebih efisien dan untuk mempelajari lebih lanjut tentang Kalender, dll.
William T. Mallard
3
Ya, tapi tidak lagi. Saya tidak menyadari overhead yang terlibat dan berasumsi bahwa itu adalah POJO.
William T. Mallard
32
Singkatnya:String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Pratik Butani
4
Anda dapat memasukkan sdf.setTimeZone(TimeZone.getDefault())di tengah
Harvey
231
Bagi mereka yang lebih suka format yang disesuaikan, Anda dapat menggunakan:
DateFormat df =newSimpleDateFormat("EEE, d MMM yyyy, HH:mm");String date = df.format(Calendar.getInstance().getTime());
Sedangkan Anda dapat memiliki pola DateFormat seperti:
"yyyy.MM.dd G 'at' HH:mm:ss z"----2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz"-----------12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
Sebenarnya, lebih aman untuk mengatur zona waktu saat ini di perangkat Time.getCurrentTimezone(), atau Anda akan mendapatkan waktu saat ini di UTC.
Time today =newTime(Time.getCurrentTimezone());
today.setToNow();
Kemudian, Anda bisa mendapatkan semua bidang tanggal yang Anda inginkan, seperti, misalnya:
textViewDay.setText(today.monthDay +"");// Day of the month (1-31)
textViewMonth.setText(today.month +"");// Month (0-11)
textViewYear.setText(today.year +"");// Year
textViewTime.setText(today.format("%k:%M:%S"));// Current time
Seperti banyak orang tunjukkan, Google mengatakan kelas ini memiliki sejumlah masalah dan tidak seharusnya digunakan lagi:
Kelas ini memiliki sejumlah masalah dan disarankan bahwa GregorianCalendar digunakan sebagai gantinya.
Masalah Dikenal:
Untuk alasan historis saat melakukan perhitungan waktu semua aritmatika saat ini dilakukan menggunakan bilangan bulat 32-bit. Ini membatasi rentang waktu yang dapat diandalkan yang direpresentasikan dari tahun 1902 hingga 2037. Lihat artikel wikipedia tentang masalah Tahun 2038 untuk detailnya. Jangan mengandalkan perilaku ini; itu mungkin berubah di masa depan. Memanggil switchTimezone (String) pada tanggal yang tidak ada, seperti waktu dinding yang dilewati karena transisi DST, akan menghasilkan tanggal pada tahun 1969 (yaitu -1, atau 1 detik sebelum 1 Januari 1970 UTC). Banyak pemformatan / penguraian mengasumsikan teks ASCII dan karenanya tidak cocok untuk digunakan dengan skrip non-ASCII.
saya mendapatkan tanggal saat ini, hari dan waktu sistem tetapi waktu tidak berubah. Saya tidak ingin menambah waktu detik demi detik. Bagaimana saya bisa melakukannya?
Kelas-kelas baru ini terinspirasi oleh proyek Joda-Time yang sangat sukses , didefinisikan oleh JSR 310 , dan diperpanjang oleh proyek ThreeTen-Extra .
Instant instant =Instant.now();// Current moment in UTC.
Zona waktu
Terapkan zona waktu ( ZoneId) untuk mendapatkan a ZonedDateTime. Jika Anda menghilangkan zona waktu, zona waktu default JVM Anda saat ini diterapkan secara implisit. Lebih baik untuk menentukan secara eksplisit zona waktu yang diinginkan / diharapkan.
ZoneId zoneId =ZoneId.of("America/Montreal");// Or "Asia/Kolkata", "Europe/Paris", and so on.ZonedDateTime zdt =ZonedDateTime.ofInstant( instant , zoneId );
Menghasilkan String
Anda dapat dengan mudah menghasilkan Stringrepresentasi teks dari nilai waktu-tanggal. Anda dapat menggunakan format standar, format kustom Anda sendiri, atau format yang dilokalkan secara otomatis.
ISO 8601
Anda dapat memanggil toStringmetode untuk mendapatkan teks diformat menggunakan standar ISO 8601 yang umum dan masuk akal .
String output = instant.toString();
2016-03-23T03: 09: 01.613Z
Perhatikan bahwa untuk ZonedDateTime, toStringmetode ini memperluas standar ISO 8601 dengan menambahkan nama zona waktu dalam tanda kurung siku. Informasi yang sangat berguna dan penting, tetapi tidak standar.
Tentukan a Localeuntuk bahasa manusia (Inggris, Prancis , dll.) Untuk digunakan dalam menerjemahkan nama hari / bulan dan juga dalam mendefinisikan norma budaya seperti urutan tahun dan bulan dan tanggal. Perhatikan bahwa Localetidak ada hubungannya dengan zona waktu.
formatter = formatter.withLocale(Locale.US );// Or Locale.CANADA_FRENCH or such.String output = zdt.format( formatter );
Pelokalan
Lebih baik lagi, biarkan java.time melakukan pekerjaan pelokalan secara otomatis.
DateTimeFormatter formatter =DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM );String output = zdt.format( formatter.withLocale(Locale.US ));// Or Locale.CANADA_FRENCH and so on.
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasi adalah JSR 310 .
Anda dapat bertukar objek java.time secara langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu untuk string, tidak perlu untuk java.sql.*kelas.
@ giraffe.guru Baca kembali Jawaban saya. Anda melewatkan peluru ketiga. Sebagian besar fungsi java.time di-port-back ke Java 6 & 7 di ThreeTen-Backport dan selanjutnya diadaptasi ke Android di ThreeTenABP .
Basil Bourque
Instant.now()dan ZonedDateTime.now()diperlukan API 26
Ryde
2
@Ryde Seperti yang saya katakan pada giraffe.guru, baca kembali Jawaban saya. Cari peluru ketiga yang menyebutkan "Android".
Basil Bourque
Saya percaya bahwa Anda benar: tabel edisi java.time baru Anda menyampaikan pesan lebih langsung dan mudah daripada daftar bullet. Jika itu saya, saya pikir saya akan memperumit masalah hanya sedikit lebih jauh dan memberi tanda centang pada tanda kurung (atau yang serupa) di bawah ThreeTenBackport / Java 8+ dan juga di bawah ThreeTenABP / Android 26+ karena kombinasi ini berfungsi, hanya saja tidak ada. biasanya ada gunanya menggunakannya. Aplikasi Android sedang dikembangkan yang menggunakan ThreeTenABP dan menargetkan berbagai level API Android baik di atas maupun di bawah level 26. Menurut saya, para pengembang memilih dengan baik dalam kasus ini.
Ole VV
1
@ OleV.V. Terima kasih telah menyarankan tanda centang sekunder di tabel grafik. Saya telah menggunakannya dalam versi tabel yang lebih baru. Jauh lebih baik.
Basil Bourque
52
Untuk ge waktu saat ini Anda dapat menggunakan System.currentTimeMillis()yang standar di Jawa. Kemudian Anda dapat menggunakannya untuk membuat tanggal
Date currentDate =newDate(System.currentTimeMillis());
Dan seperti yang disebutkan oleh orang lain untuk menciptakan waktu
Time currentTime =newTime();
currentTime.setToNow();
@Jonik Cannot resolve constructor Date()di android, Android SDK menggunakan campuran Java 6 dan 7.
surfer190
1
Terima kasih. Date currentDate = new Date(System.currentTimeMillis());benar
mghhgm
@mghhgm Tidak, new Date(System.currentTimeMillis())tidak benar: (a) itu mubazir, karena sama persis dengan new Date(). (B) Kelas merepotkan java.util.Datesekarang digantikan oleh java.time.InstantJava 8 dan yang lebih baru. Back-porting ke Java 6 & 7 di proyek ThreeTen-Backport , dan ke Android sebelumnya (<26) di ThreeTenABP .
Basil Bourque
37
Anda dapat menggunakan kode:
Calendar c =Calendar.getInstance();SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");String strDate = sdf.format(c.getTime());
Keluaran:
2014-11-1100:47:55
Anda juga mendapatkan beberapa opsi pemformatan lagi SimpleDateFormatdari sini .
bagaimana bisa mendapatkan tanggal untuk 5-10 hari ke depan .. apakah ini perhitungan manual di sini?
CoDe
@CoDe Anda menggunakan Tanggal untuk itu
FindOutIslamNow
27
Ada beberapa opsi karena Android sebagian besar adalah Java, tetapi jika Anda ingin menulisnya di textView, kode berikut akan melakukan trik:
String currentDateTimeString =DateFormat.getDateInstance().format(newDate());// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
Anda harus menggunakan Calendaratau GregorianCalendar. The Datekelas sudah ditinggalkan.
Joseph Earl
Terima kasih sobat :) Saya tidak tahu sama sekali tentang hal itu
dLobatog
12
Menurut dokumentasi referensi Date () ( developer.android.com/reference/java/util/Date.html ) tidak ada yang merujuk ke kelas Date () yang ditinggalkan - namun beberapa metode dan konstruktor tidak digunakan lagi.
Zac Seth
2
Ini akan menghasilkan hasil yang salah dalam pengertian pengaturan pengguna saat ini (format 12/24 waktu, misalnya). Gunakan android.text.format.DateFormat.getTimeFormat (Konteks konteks) untuk mendapatkan DateFormat untuk pengaturan pengguna saat ini.
wonder.mice
@Zac Anda benar bahkan metode getTime dari Date bahkan lebih digunakan penuh
G Era designator (before christ, after christ)
y Year(e.g.12or2012).Use either yy or yyyy.
M Monthin year.Numberof M's determine length of format (e.g. MM, MMM or MMMMM)
d Day in month. Number of d's determine length of format (e.g. d or dd)
h Hourof day,1-12(AM / PM)(normally hh)
H Hourof day,0-23(normally HH)
m Minutein hour,0-59(normally mm)
s Secondin minute,0-59(normally ss)
S Millisecondin second,0-999(normally SSS)
E Dayin week (e.g Monday,Tuesday etc.)
D Dayin year (1-366)
F Dayof week in month (e.g.1stThursdayofDecember)
w Weekin year (1-53)
W Weekin month (0-5)
a AM / PM marker
k Hourin day (1-24, unlike HH's 0-23)
K Hour in day, AM / PM (0-11)
z Time Zone
Saya tidak suka penggabungan ketat logika presentasi dan logika proses; Saya lebih suka metode yang hanya melakukan format & mengambil param input tanggal. Saya juga tidak mengerti mengapa Anda menggunakan 2 SimpleDateFormats & 2 Dates ... tidak bisakah Anda hanya menggunakan "yyyy/MM/dd HH:mm"format & panggilan kalender?
AjahnCharles
12
Time time =newTime();
time.setToNow();System.out.println("time: "+ time.hour+":"+time.minute);
Ini akan memberi Anda, misalnya, 12:32.
Ingatlah untuk mengimpor android.text.format.Time;
if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.O){
val current =LocalDateTime.now()
val formatter =DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss")var myDate:String= current.format(formatter)Log.d("Date","DATE : "+ myDate)}else{var date =Date()
val formatter =SimpleDateFormat("MMM dd yyyy HH:mma")
val myDate:String= formatter.format(date)Log.d("Date","DATE : "+ myDate)}
Pola Tanggal Formater
"yyyy.MM.dd G 'at' HH:mm:ss z"----2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz"-----------12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
Terima kasih telah mau berkontribusi. Apakah Anda menyumbangkan sesuatu yang belum ada dalam 36 jawaban sebelumnya? Bagaimanapun Anda masih menggunakan kelas yang terkenal merepotkan dan lama ketinggalan jaman SimpleDateFormat. Bahkan sebelum Oreo Anda tidak perlu melakukannya, Anda dapat menggunakan ThreeTenABP , backport java.time, API tanggal dan waktu Java modern.
Ole VV
11
Anda juga dapat menggunakan android.os.SystemClock. Misalnya SystemClock.elapsedRealtime () akan memberi Anda pembacaan waktu yang lebih akurat ketika ponsel tertidur.
DateFormat df =newSimpleDateFormat("HH:mm");// Format timeString time = df.format(Calendar.getInstance().getTime());DateFormat df1 =newSimpleDateFormat("yyyy/MM/dd");// Format dateString date = df1.format(Calendar.getInstance().getTime());
Ini adalah solusi liner sempurna dan elegan. Hanya itu yang dibutuhkan, bukan solusi panjang yang tidak perlu seperti jawaban lain.
zeeshan
5
Metode di bawah ini akan mengembalikan tanggal dan waktu saat ini di String, Gunakan zona waktu berbeda sesuai dengan zona waktu Anda yang sebenarnya. Saya telah menggunakan GMT
Anda harus menggunakan kelas Calender sesuai dengan API baru. Kelas tanggal sudah tidak digunakan lagi.
Calendar cal =Calendar.getInstance();String date =""+cal.get(Calendar.DATE)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.YEAR);String time =""+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE);
Date date =newDate();SimpleDateFormat dateFormatWithZone =newSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());String currentDate = dateFormatWithZone.format(date);
Jawaban:
Anda bisa menggunakan:
Ada banyak konstanta di Kalender untuk semua yang Anda butuhkan.
Sunting:
Periksa dokumentasi kelas Kalender
sumber
Calendar.getInstance().getTime()
atauCalendar.getInstance().getTimeInMillis()
akan berhasil.Anda dapat ( tetapi tidak lagi harus - lihat di bawah!) Menggunakan android.text.format.Time :
Dari referensi yang ditautkan di atas:
CATATAN 1: Sudah beberapa tahun sejak saya menulis jawaban ini, dan ini tentang kelas lama, khusus Android, dan sekarang sudah usang. Google sekarang mengatakan bahwa "[t] kelasnya memiliki sejumlah masalah dan disarankan agar GregorianCalendar digunakan sebagai gantinya".
CATATAN 2: Meskipun
Time
kelas memilikitoMillis(ignoreDaylightSavings)
metode, ini hanyalah kenyamanan untuk berpindah ke metode yang mengharapkan waktu dalam milidetik. Nilai waktu hanya tepat untuk satu detik ; porsi milidetik selalu000
. Jika dalam satu lingkaran Anda lakukanUrutan yang dihasilkan akan mengulangi nilai yang sama, seperti
1410543204000
, hingga detik berikutnya dimulai, saat waktu1410543205000
akan mulai mengulangi.sumber
SystemClock.uptimeMillis()
untuk interval waktu. Karena itulah yang digunakan sebagian besar fungsi bawaan, ada motivasi kuat untuk menerapkannya dengan baik di semua perangkat. Lihat diskusi di SystemClock ... Jika Anda ingin menghubungkannya dengan waktu dalam sehari, di aplikasi onResume, baca keduanya, dan Time / setToNow / toMillis. Ingat perbedaan di antara mereka.GregorianCalendar
telah digantikan tahun yang lalu di Jawa dan di Android kemudian oleh kelas java.time , khususnyaZonedDateTime
. Untuk Android sebelumnya, lihat proyek ThreeTen-Backport dan ThreeTenABP .Jika Anda ingin mendapatkan tanggal dan waktu dalam pola tertentu, Anda dapat menggunakan yang berikut ini:
Atau,
Tanggal :
Waktu:
sumber
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
sdf.setTimeZone(TimeZone.getDefault())
di tengahBagi mereka yang lebih suka format yang disesuaikan, Anda dapat menggunakan:
Sedangkan Anda dapat memiliki pola DateFormat seperti:
sumber
Sebenarnya, lebih aman untuk mengatur zona waktu saat ini di perangkat
Time.getCurrentTimezone()
, atau Anda akan mendapatkan waktu saat ini di UTC.Kemudian, Anda bisa mendapatkan semua bidang tanggal yang Anda inginkan, seperti, misalnya:
Lihat kelas android.text.format.Time untuk semua detailnya.
MEMPERBARUI
Seperti banyak orang tunjukkan, Google mengatakan kelas ini memiliki sejumlah masalah dan tidak seharusnya digunakan lagi:
sumber
Untuk tanggal dan waktu saat ini, gunakan:
Output yang mana:
sumber
Coba dengan cara ini Semua format diberikan di bawah ini untuk mendapatkan format tanggal dan waktu.
sumber
tl; dr
…atau…
Detail
Jawaban lainnya, walaupun benar, sudah usang. Kelas tanggal-waktu lama telah terbukti dirancang dengan buruk, membingungkan, dan menyusahkan.
waktu java
Kelas-kelas lama telah digantikan oleh kerangka java.time .
Kelas-kelas baru ini terinspirasi oleh proyek Joda-Time yang sangat sukses , didefinisikan oleh JSR 310 , dan diperpanjang oleh proyek ThreeTen-Extra .
Lihat Tutorial Oracle .
Instant
Suatu
Instant
saat di timeline dalam UTC dengan resolusi hingga nanodetik .Zona waktu
Terapkan zona waktu (
ZoneId
) untuk mendapatkan aZonedDateTime
. Jika Anda menghilangkan zona waktu, zona waktu default JVM Anda saat ini diterapkan secara implisit. Lebih baik untuk menentukan secara eksplisit zona waktu yang diinginkan / diharapkan.Gunakan nama zona waktu yang tepat dalam format
continent/region
sepertiAmerica/Montreal
,Europe/Brussels
, atauAsia/Kolkata
. Jangan pernah menggunakan singkatan 3-4 huruf sepertiEST
atauIST
karena mereka tidak standar atau unik.Menghasilkan String
Anda dapat dengan mudah menghasilkan
String
representasi teks dari nilai waktu-tanggal. Anda dapat menggunakan format standar, format kustom Anda sendiri, atau format yang dilokalkan secara otomatis.ISO 8601
Anda dapat memanggil
toString
metode untuk mendapatkan teks diformat menggunakan standar ISO 8601 yang umum dan masuk akal .Perhatikan bahwa untuk
ZonedDateTime
,toString
metode ini memperluas standar ISO 8601 dengan menambahkan nama zona waktu dalam tanda kurung siku. Informasi yang sangat berguna dan penting, tetapi tidak standar.Format khusus
Atau tentukan pola pemformatan khusus Anda sendiri dengan
DateTimeFormatter
kelas.Tentukan a
Locale
untuk bahasa manusia (Inggris, Prancis , dll.) Untuk digunakan dalam menerjemahkan nama hari / bulan dan juga dalam mendefinisikan norma budaya seperti urutan tahun dan bulan dan tanggal. Perhatikan bahwaLocale
tidak ada hubungannya dengan zona waktu.Pelokalan
Lebih baik lagi, biarkan java.time melakukan pekerjaan pelokalan secara otomatis.
Tentang java.time
The java.time kerangka dibangun ke Jawa 8 dan kemudian. Kelas-kelas ini menggantikan tua merepotkan warisan kelas tanggal-waktu seperti
java.util.Date
,Calendar
, &SimpleDateFormat
.Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke kelas java.time .
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasi adalah JSR 310 .
Anda dapat bertukar objek java.time secara langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu untuk string, tidak perlu untuk
java.sql.*
kelas.Di mana mendapatkan kelas java.time?
sumber
Instant.now()
danZonedDateTime.now()
diperlukan API 26Untuk ge waktu saat ini Anda dapat menggunakan
System.currentTimeMillis()
yang standar di Jawa. Kemudian Anda dapat menggunakannya untuk membuat tanggalDan seperti yang disebutkan oleh orang lain untuk menciptakan waktu
sumber
System.currentTimeMillis()
; hanyanew Date()
melakukan hal yang sama .Cannot resolve constructor Date()
di android, Android SDK menggunakan campuran Java 6 dan 7.Date currentDate = new Date(System.currentTimeMillis());
benarnew Date(System.currentTimeMillis())
tidak benar: (a) itu mubazir, karena sama persis dengannew Date()
. (B) Kelas merepotkanjava.util.Date
sekarang digantikan olehjava.time.Instant
Java 8 dan yang lebih baru. Back-porting ke Java 6 & 7 di proyek ThreeTen-Backport , dan ke Android sebelumnya (<26) di ThreeTenABP .Anda dapat menggunakan kode:
Keluaran:
Anda juga mendapatkan beberapa opsi pemformatan lagi
SimpleDateFormat
dari sini .sumber
java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .Mudah, Anda dapat membedah waktu untuk mendapatkan nilai terpisah untuk waktu saat ini, sebagai berikut:
Sama berlaku untuk tanggal, sebagai berikut:
sumber
Ada beberapa opsi karena Android sebagian besar adalah Java, tetapi jika Anda ingin menulisnya di textView, kode berikut akan melakukan trik:
sumber
Calendar
atauGregorianCalendar
. TheDate
kelas sudah ditinggalkan.Pola format tanggal
sumber
sumber
Ini adalah metode yang akan berguna untuk mendapatkan tanggal dan waktu:
Anda dapat memanggil metode ini dan mendapatkan nilai tanggal dan waktu saat ini:
sumber
SimpleDateFormat
s & 2Date
s ... tidak bisakah Anda hanya menggunakan"yyyy/MM/dd HH:mm"
format & panggilan kalender?Ini akan memberi Anda, misalnya, 12:32.
Ingatlah untuk mengimpor android.text.format.Time;
sumber
sumber
Untuk tanggal dan waktu saat ini dengan format, Gunakan
Di jawa
Di Kotlin
Pola Tanggal Formater
sumber
SimpleDateFormat
. Bahkan sebelum Oreo Anda tidak perlu melakukannya, Anda dapat menggunakan ThreeTenABP , backport java.time, API tanggal dan waktu Java modern.Anda juga dapat menggunakan android.os.SystemClock. Misalnya SystemClock.elapsedRealtime () akan memberi Anda pembacaan waktu yang lebih akurat ketika ponsel tertidur.
sumber
Jika Anda memerlukan tanggal saat ini:
Jika Anda membutuhkan waktu saat ini:
sumber
Untuk format waktu dan tanggal yang disesuaikan:
Outputnya seperti format di bawah ini: 2015-06-18T10: 15: 56-05: 00
sumber
sumber
Coba ini juga bekerja untuk saya.
sumber
Anda dapat memperoleh tanggal dengan menggunakan:
Ini akan memberi Anda hasil dalam bentuk yang bagus, seperti dalam contoh ini: "2014/02/09".
sumber
Time t = new Time();
akan menggunakan zona waktu default. Dalam pengalaman saya, default == saat ini.Yah saya punya masalah dengan beberapa jawaban oleh API jadi saya menggabungkan kode ini, saya harap ini membantu mereka:
Output: 03:25 PM - 2017/10/03
sumber
Anda cukup menggunakan kode berikut:
sumber
Coba ini
sumber
Metode di bawah ini akan mengembalikan tanggal dan waktu saat ini di String, Gunakan zona waktu berbeda sesuai dengan zona waktu Anda yang sebenarnya. Saya telah menggunakan GMT
sumber
Anda harus menggunakan kelas Calender sesuai dengan API baru. Kelas tanggal sudah tidak digunakan lagi.
sumber
Coba gunakan kode di bawah ini:
sumber