Cara mendapatkan waktu dan tanggal saat ini di Android

1109

Bagaimana saya bisa mendapatkan waktu dan tanggal saat ini di aplikasi Android?

M7M
sumber
3
43 jawaban! Sementara banyak dari mereka yang baik ketika mereka ditulis, jawaban yang baik untuk digunakan pada tahun 2018 ada di sini .
Ole VV

Jawaban:

1310

Anda bisa menggunakan:

import java.util.Calendar

Date currentTime = Calendar.getInstance().getTime();

Ada banyak konstanta di Kalender untuk semua yang Anda butuhkan.

Sunting:
Periksa dokumentasi kelas Kalender

miken32
sumber
14
+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.
akousmata
487

Anda dapat ( tetapi tidak lagi harus - lihat di bawah!) Menggunakan android.text.format.Time :

Time now = new Time();
now.setToNow();

Dari referensi yang ditautkan di atas:

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 = new Time();   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.

Thomas Padron-McCarthy
sumber
2
@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.
ToolmakerSteve
Jangan gunakan kelas Waktu . Itu akan dihapus di masa depan dan memiliki banyak masalah dengannya.
Sandy Chapman
1
> 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:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());

Atau,

Tanggal :

String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());

Waktu:

String currentTime = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());
Miciurash
sumber
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 = new SimpleDateFormat("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
ANEMATI
sumber
126

Sebenarnya, lebih aman untuk mengatur zona waktu saat ini di perangkat Time.getCurrentTimezone(), atau Anda akan mendapatkan waktu saat ini di UTC.

Time today = new Time(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

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:

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.

kaneda
sumber
Waktu harus diimpor dari paket mana?
ManishSB
Kelas ini sudah tidak digunakan lagi di API level 22. Sebagai gantinya, kita dapat menggunakan GregorianCalendar.
Choletski
78

Untuk tanggal dan waktu saat ini, gunakan:

String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

Output yang mana:

Feb 27, 2012 5:41:23 PM
Kirit
sumber
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?
Bhavesh Hirpara
2
Ini adalah cara yang disarankan untuk melakukannya, menurut API Android: developer.android.com/reference/java/text/… Terima kasih!
M Granja
58

Coba dengan cara ini Semua format diberikan di bawah ini untuk mendapatkan format tanggal dan waktu.

    Calendar c = Calendar.getInstance();
    SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aa");
    String datetime = dateformat.format(c.getTime());
    System.out.println(datetime);

pertama

kedua ketiga

Amitsharma
sumber
53

tl; dr

Instant.now()  // Current moment in UTC.

…atau…

ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )  // In a particular time zone

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 Instantsaat di timeline dalam UTC dengan resolusi hingga nanodetik .

 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.

Gunakan nama zona waktu yang tepat dalam format continent/regionseperti America/Montreal, Europe/Brussels, atau Asia/Kolkata. Jangan pernah menggunakan singkatan 3-4 huruf seperti ESTatau ISTkarena mereka tidak standar atau unik.

ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Tabel tipe waktu-tanggal di Jawa, baik yang modern maupun yang lama

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.

2016-03-22T20: 09: 01.613-08: 00 [America / Los_Angeles]

Format khusus

Atau tentukan pola pemformatan khusus Anda sendiri dengan DateTimeFormatterkelas.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );

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.

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?

Tabel daftar implementasi mana dari teknologi * java.time * untuk digunakan pada versi Java dan Android mana.

Basil Bourque
sumber
2
@ 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 = new Date(System.currentTimeMillis());

Dan seperti yang disebutkan oleh orang lain untuk menciptakan waktu

Time currentTime = new Time();
currentTime.setToNow();
JosephL
sumber
13
Tidak perlu System.currentTimeMillis(); hanya new Date() melakukan hal yang sama .
Jonik
@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 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());

Keluaran:

2014-11-11 00:47:55

Anda juga mendapatkan beberapa opsi pemformatan lagi SimpleDateFormatdari sini .

Himanshu Aggarwal
sumber
FYI, merepotkan tua kelas tanggal-waktu seperti java.util.Date, java.util.Calendar, dan java.text.SimpleDateFormatsekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .
Basil Bourque
32

Mudah, Anda dapat membedah waktu untuk mendapatkan nilai terpisah untuk waktu saat ini, sebagai berikut:

Calendar cal = Calendar.getInstance(); 

  int millisecond = cal.get(Calendar.MILLISECOND);
  int second = cal.get(Calendar.SECOND);
  int minute = cal.get(Calendar.MINUTE);
        //12 hour format
  int hour = cal.get(Calendar.HOUR);
        //24 hour format
  int hourofday = cal.get(Calendar.HOUR_OF_DAY);

Sama berlaku untuk tanggal, sebagai berikut:

Calendar cal = Calendar.getInstance(); 

  int dayofyear = cal.get(Calendar.DAY_OF_YEAR);
  int year = cal.get(Calendar.YEAR);
  int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
  int dayofmonth = cal.get(Calendar.DAY_OF_MONTH);
SkateJerrySkate
sumber
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(new Date());

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
dLobatog
sumber
8
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
24
SimpleDateFormat databaseDateTimeFormate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat databaseDateFormate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
SimpleDateFormat sdf3 = new SimpleDateFormat("EEE, MMM d, ''yy");
SimpleDateFormat sdf4 = new SimpleDateFormat("h:mm a");
SimpleDateFormat sdf5 = new SimpleDateFormat("h:mm");
SimpleDateFormat sdf6 = new SimpleDateFormat("H:mm:ss:SSS");
SimpleDateFormat sdf7 = new SimpleDateFormat("K:mm a,z");
SimpleDateFormat sdf8 = new SimpleDateFormat("yyyy.MMMMM.dd GGG hh:mm aaa");


String currentDateandTime = databaseDateTimeFormate.format(new Date());     //2009-06-30 08:29:36
String currentDateandTime = databaseDateFormate.format(new Date());     //2009-06-30
String currentDateandTime = sdf1.format(new Date());     //30.06.09
String currentDateandTime = sdf2.format(new Date());     //2009.06.30 AD at 08:29:36 PDT
String currentDateandTime = sdf3.format(new Date());     //Tue, Jun 30, '09
String currentDateandTime = sdf4.format(new Date());     //8:29 PM
String currentDateandTime = sdf5.format(new Date());     //8:29
String currentDateandTime = sdf6.format(new Date());     //8:28:36:249
String currentDateandTime = sdf7.format(new Date());     //8:29 AM,PDT
String currentDateandTime = sdf8.format(new Date());     //2009.June.30 AD 08:29 AM

Pola format tanggal

G   Era designator (before christ, after christ)
y   Year (e.g. 12 or 2012). Use either yy or yyyy.
M   Month in year. Number of 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   Hour of day, 1-12 (AM / PM) (normally hh)
H   Hour of day, 0-23 (normally HH)
m   Minute in hour, 0-59 (normally mm)
s   Second in minute, 0-59 (normally ss)
S   Millisecond in second, 0-999 (normally SSS)
E   Day in week (e.g Monday, Tuesday etc.)
D   Day in year (1-366)
F   Day of week in month (e.g. 1st Thursday of December)
w   Week in year (1-53)
W   Week in month (0-5)
a   AM / PM marker
k   Hour in day (1-24, unlike HH's 0-23)
K   Hour in day, AM / PM (0-11)
z   Time Zone
Vignesh KM
sumber
1
Meskipun jawaban lain juga benar. Saya menyukai jawaban ini karena membantu masalah terkait waktu juga. Terima kasih @Vighnesh KM
Ankit Gupta
17
final Calendar c = Calendar.getInstance();
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH);
    int mDay = c.get(Calendar.DAY_OF_MONTH);

textView.setText(""+mDay+"-"+mMonth+"-"+mYear);
Alex Muriithi
sumber
15

Ini adalah metode yang akan berguna untuk mendapatkan tanggal dan waktu:

private String getDate(){
    DateFormat dfDate = new SimpleDateFormat("yyyy/MM/dd");
    String date=dfDate.format(Calendar.getInstance().getTime());
    DateFormat dfTime = new SimpleDateFormat("HH:mm");
    String time = dfTime.format(Calendar.getInstance().getTime());
    return date + " " + time;
}

Anda dapat memanggil metode ini dan mendapatkan nilai tanggal dan waktu saat ini:

2017/01//09 19:23
Jorgesys
sumber
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 = new Time();
time.setToNow();
System.out.println("time: " + time.hour+":"+time.minute);

Ini akan memberi Anda, misalnya, 12:32.

Ingatlah untuk mengimpor android.text.format.Time;

Sam Haque
sumber
12
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();
    System.out.println("time => " + dateFormat.format(cal.getTime()));

    String time_str = dateFormat.format(cal.getTime());

    String[] s = time_str.split(" ");

    for (int i = 0; i < s.length; i++) {
         System.out.println("date  => " + s[i]);
    }

    int year_sys = Integer.parseInt(s[0].split("/")[0]);
    int month_sys = Integer.parseInt(s[0].split("/")[1]);
    int day_sys = Integer.parseInt(s[0].split("/")[2]);

    int hour_sys = Integer.parseInt(s[1].split(":")[0]);
    int min_sys = Integer.parseInt(s[1].split(":")[1]);

    System.out.println("year_sys  => " + year_sys);
    System.out.println("month_sys  => " + month_sys);
    System.out.println("day_sys  => " + day_sys);

    System.out.println("hour_sys  => " + hour_sys);
    System.out.println("min_sys  => " + min_sys);
Duggu
sumber
12

Untuk tanggal dan waktu saat ini dengan format, Gunakan

Di jawa

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());
Log.d("Date","DATE : " + strDate)

Di Kotlin

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
Vipul Prajapati
sumber
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.

Quadroid
sumber
10

Jika Anda memerlukan tanggal saat ini:

Calendar cc = Calendar.getInstance();
int year = cc.get(Calendar.YEAR);
int month = cc.get(Calendar.MONTH);
int mDay = cc.get(Calendar.DAY_OF_MONTH);
System.out.println("Date", year + ":" + month + ":" + mDay);

Jika Anda membutuhkan waktu saat ini:

 int mHour = cc.get(Calendar.HOUR_OF_DAY);
 int mMinute = cc.get(Calendar.MINUTE);
 System.out.println("time_format" + String.format("%02d:%02d", mHour , mMinute));
RejoylinLokeshwaran
sumber
9

Untuk format waktu dan tanggal yang disesuaikan:

    SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ",Locale.ENGLISH);
    String cDateTime=dateFormat.format(new Date());

Outputnya seperti format di bawah ini: 2015-06-18T10: 15: 56-05: 00

Omar Faroque Anik
sumber
8
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
Muhammad Aamir Ali
sumber
8
Time now = new Time();
now.setToNow();

Coba ini juga bekerja untuk saya.

Orang itu
sumber
8

Anda dapat memperoleh tanggal dengan menggunakan:

Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");

Ini akan memberi Anda hasil dalam bentuk yang bagus, seperti dalam contoh ini: "2014/02/09".

Annabelle
sumber
Konstruktor tanpa parameter Time t = new Time();akan menggunakan zona waktu default. Dalam pengalaman saya, default == saat ini.
William T. Mallard
7

Yah saya punya masalah dengan beberapa jawaban oleh API jadi saya menggabungkan kode ini, saya harap ini membantu mereka:

    Time t = new Time(Time.getCurrentTimezone());
    t.setToNow();
    String date1 = t.format("%Y/%m/%d");

    Date date = new Date(System.currentTimeMillis());
    SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
            Locale.ENGLISH);
    String var = dateFormat.format(date);
    String horafecha = var+ " - " + date1;

    tvTime.setText(horafecha);

Output: 03:25 PM - 2017/10/03

Charlie
sumber
7

Anda cukup menggunakan kode berikut:

 DateFormat df = new SimpleDateFormat("HH:mm"); // Format time
 String time = df.format(Calendar.getInstance().getTime());

 DateFormat df1 = new SimpleDateFormat("yyyy/MM/dd"); // Format date
 String date = df1.format(Calendar.getInstance().getTime());
Ali Ziaee
sumber
6

Coba ini

String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
Abhinaw Kumar
sumber
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

public static String GetToday(){
    Date presentTime_Date = Calendar.getInstance().getTime();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    return dateFormat.format(presentTime_Date);
}
Bahaya
sumber
4

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);
Akshay Paliwal
sumber
4

Coba gunakan kode di bawah ini:

 Date date = new Date();
 SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());  
 String currentDate = dateFormatWithZone.format(date);
Manikandan K
sumber