Jawaban:
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
Calendar.getInstance().getTime()
atau Calendar.getInstance().getTimeInMillis()
akan berhasil.
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 Time
kelas 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 1410543205000
akan mulai mengulangi.
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 , khususnya ZonedDateTime
. 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:
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());
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
sdf.setTimeZone(TimeZone.getDefault())
di tengah
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
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.
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
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);
Instant.now() // Current moment in UTC.
…atau…
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
Jawaban lainnya, walaupun benar, sudah usang. Kelas tanggal-waktu lama telah terbukti dirancang dengan buruk, membingungkan, dan menyusahkan.
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 .
Instant instant = Instant.now(); // Current moment in UTC.
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/region
seperti America/Montreal
, Europe/Brussels
, atau Asia/Kolkata
. Jangan pernah menggunakan singkatan 3-4 huruf seperti EST
atau IST
karena 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 );
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.
Anda dapat memanggil toString
metode 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
, 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.
2016-03-22T20: 09: 01.613-08: 00 [America / Los_Angeles]
Atau tentukan pola pemformatan khusus Anda sendiri dengan DateTimeFormatter
kelas.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );
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 bahwa Locale
tidak ada hubungannya dengan zona waktu.
formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );
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.
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?
Instant.now()
dan ZonedDateTime.now()
diperlukan API 26
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();
Cannot resolve constructor Date()
di android, Android SDK menggunakan campuran Java 6 dan 7.
Date currentDate = new Date(System.currentTimeMillis());
benar
new Date(System.currentTimeMillis())
tidak benar: (a) itu mubazir, karena sama persis dengan new Date()
. (B) Kelas merepotkan java.util.Date
sekarang digantikan oleh java.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:
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 SimpleDateFormat
dari sini .
java.util.Date
, java.util.Calendar
, dan java.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:
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);
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);
Calendar
atau GregorianCalendar
. The Date
kelas sudah ditinggalkan.
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
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);
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
SimpleDateFormat
s & 2 Date
s ... tidak bisakah Anda hanya menggunakan "yyyy/MM/dd HH:mm"
format & panggilan kalender?
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);
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
SimpleDateFormat
. Bahkan sebelum Oreo Anda tidak perlu melakukannya, Anda dapat menggunakan ThreeTenABP , backport java.time, API tanggal dan waktu Java modern.
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));
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
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
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".
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:
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
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());
Coba ini
String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
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);
}
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);
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);