Câu trả lời:
Bạn đã có thể sử dụng:
import java.util.Calendar
Date currentTime = Calendar.getInstance().getTime();
Có rất nhiều hằng số trong Lịch cho mọi thứ bạn cần.
Chỉnh sửa:
Kiểm tra tài liệu lớp Lịch
Calendar.getInstance().getTime()
hoặc Calendar.getInstance().getTimeInMillis()
sẽ hoạt động.
Bạn có thể ( nhưng không còn nên - xem bên dưới!) Sử dụng android.text.format.Time :
Time now = new Time();
now.setToNow();
Từ tài liệu tham khảo được liên kết ở trên:
Lớp Time là sự thay thế nhanh hơn cho các lớp java.util.CalWiki và java.util.GregorianCalWiki. Một thể hiện của lớp Time biểu thị một khoảnh khắc trong thời gian, được chỉ định với độ chính xác thứ hai.
CHÚ THÍCH 1: Đã vài năm kể từ khi tôi viết câu trả lời này, và đó là về một lớp học cũ, cụ thể dành cho Android và hiện không dùng nữa. Google hiện nói rằng "[t] lớp của anh ấy có một số vấn đề và chúng tôi khuyên bạn nên sử dụng GregorianCalWiki thay thế".
CHÚ THÍCH 2: Mặc dù Time
lớp có một toMillis(ignoreDaylightSavings)
phương thức, đây chỉ đơn giản là sự tiện lợi để chuyển sang các phương thức mong đợi thời gian tính bằng mili giây. Giá trị thời gian chỉ chính xác đến một giây ; phần mili giây luôn luôn 000
. Nếu trong một vòng lặp bạn làm
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 ...
Chuỗi kết quả sẽ lặp lại cùng một giá trị, chẳng hạn như 1410543204000
, cho đến khi giây tiếp theo bắt đầu, tại thời điểm đó 1410543205000
sẽ bắt đầu lặp lại.
SystemClock.uptimeMillis()
dùng cho thời gian cách quãng. Vì đó là những gì hầu hết các chức năng tích hợp sử dụng, có động lực mạnh mẽ để nó được triển khai tốt trên tất cả các thiết bị. Xem thảo luận trong SystemClock ... Nếu bạn muốn tương quan với thời gian trong ngày, trong ứng dụng onResume, hãy đọc cả điều này và Time / setToNow / toMillis. Hãy nhớ sự khác biệt giữa những người.
GregorianCalendar
đã được thay thế từ nhiều năm trước trong Java và trong Android sau này bởi các lớp java.time , cụ thể ZonedDateTime
. Đối với Android trước đó, hãy xem các dự án ThreeTen-Backport và ThreeTenABP .
Nếu bạn muốn lấy ngày và giờ theo một mẫu cụ thể, bạn có thể sử dụng như sau:
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());
Hoặc là,
Ngày :
String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());
Thời gian:
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())
vào giữa
Đối với những người thích thay đổi định dạng tùy chỉnh, bạn có thể sử dụng:
DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm");
String date = df.format(Calendar.getInstance().getTime());
Trong khi đó bạn có thể có các mẫu DateFormat như:
"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
Trên thực tế, an toàn hơn khi đặt múi giờ hiện tại được đặt trên thiết bị Time.getCurrentTimezone()
, nếu không bạn sẽ có được thời gian hiện tại trong UTC.
Time today = new Time(Time.getCurrentTimezone());
today.setToNow();
Sau đó, bạn có thể lấy tất cả các trường ngày bạn muốn, ví dụ:
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
Xem lớp android.text.format.Time để biết tất cả các chi tiết.
CẬP NHẬT
Như nhiều người đang chỉ ra, Google cho biết lớp này có một số vấn đề và không được sử dụng nữa:
Lớp này có một số vấn đề và thay vào đó nên sử dụng GregorianCalWiki.
Các vấn đề đã biết:
Vì các lý do lịch sử khi thực hiện tính toán thời gian, tất cả số học hiện đang diễn ra bằng cách sử dụng số nguyên 32 bit. Điều này giới hạn phạm vi thời gian đáng tin cậy có thể biểu thị từ năm 1902 đến năm 2037. Xem bài viết trên wikipedia về vấn đề Năm 2038 để biết chi tiết. Đừng dựa vào hành vi này; nó có thể thay đổi trong tương lai. Gọi switchTimezone (Chuỗi) vào một ngày không thể tồn tại, chẳng hạn như thời gian treo tường bị bỏ qua do chuyển đổi DST, sẽ dẫn đến một ngày vào năm 1969 (tức là -1, hoặc 1 giây trước ngày 1 tháng 1 năm 1970 UTC). Phần lớn định dạng / phân tích giả định văn bản ASCII và do đó không phù hợp để sử dụng với các tập lệnh không phải ASCII.
Đối với ngày và giờ hiện tại, sử dụng:
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
Đầu ra nào:
Feb 27, 2012 5:41:23 PM
Thử theo cách này Tất cả các định dạng được đưa ra dưới đây để có được định dạng ngày và giờ.
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.
…hoặc là…
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
Các câu trả lời khác, trong khi chính xác, đã lỗi thời. Các lớp thời gian cũ đã được chứng minh là được thiết kế kém, khó hiểu và rắc rối.
Các lớp cũ này đã được thay thế bởi khung java.time .
Các lớp mới này được lấy cảm hứng từ dự án Joda-Time rất thành công , được xác định bởi JSR 310 và được mở rộng bởi dự án ThreeTen-Extra .
Xem Hướng dẫn của Oracle .
Instant
An Instant
là một khoảnh khắc trên dòng thời gian trong UTC với độ phân giải lên tới nano giây .
Instant instant = Instant.now(); // Current moment in UTC.
Áp dụng múi giờ ( ZoneId
) để có được a ZonedDateTime
. Nếu bạn bỏ qua múi giờ thì múi giờ mặc định hiện tại của JVM sẽ được áp dụng hoàn toàn. Tốt hơn để xác định rõ ràng múi giờ mong muốn / dự kiến.
Sử dụng tên múi giờ thích hợp trong các định dạng của continent/region
như America/Montreal
, Europe/Brussels
hoặc Asia/Kolkata
. Không bao giờ sử dụng 3-4 chữ viết tắt như EST
hoặc IST
vì chúng không được tiêu chuẩn hóa hoặc duy nhất.
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Bạn có thể dễ dàng tạo một String
biểu diễn dưới dạng văn bản của giá trị thời gian. Bạn có thể đi với định dạng chuẩn, định dạng tùy chỉnh của riêng bạn hoặc định dạng tự động cục bộ.
Bạn có thể gọi các toString
phương thức để có được định dạng văn bản bằng cách sử dụng tiêu chuẩn ISO 8601 phổ biến và hợp lý .
String output = instant.toString();
2016-03-23T03: 09: 01.613Z
Lưu ý rằng ZonedDateTime
, toString
phương pháp mở rộng tiêu chuẩn ISO 8601 bằng cách nối thêm tên của múi giờ trong ngoặc vuông. Thông tin cực kỳ hữu ích và quan trọng, nhưng không chuẩn.
2016-03-22T20: 09: 01.613-08: 00 [Mỹ / Los_Angele]
Hoặc chỉ định mẫu định dạng cụ thể của riêng bạn với DateTimeFormatter
lớp.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );
Chỉ định một Locale
ngôn ngữ của con người (tiếng Anh, tiếng Pháp , v.v.) để sử dụng trong việc dịch tên của ngày / tháng và cả trong việc xác định các chuẩn mực văn hóa như thứ tự của năm và tháng và ngày. Lưu ý rằng Locale
không có gì để làm với múi giờ.
formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );
Tốt hơn hết, hãy để java.time thực hiện công việc bản địa hóa tự động.
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) ); // Or Locale.CANADA_FRENCH and so on.
Các java.time khung được xây dựng vào Java 8 và sau đó. Những lớp học thay thế cái cũ phiền hà di sản lớp học ngày thời gian như java.util.Date
, Calendar
, & SimpleDateFormat
.
Các Joda thời gian dự án, bây giờ trong chế độ bảo trì , khuyên chuyển đổi sang các java.time lớp.
Để tìm hiểu thêm, xem Hướng dẫn Oracle . Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310 .
Bạn có thể trao đổi các đối tượng java.time trực tiếp với cơ sở dữ liệu của bạn. Sử dụng trình điều khiển JDBC tương thích với JDBC 4.2 trở lên. Không cần chuỗi, không cần java.sql.*
lớp.
Nơi để có được các lớp java.time?
Instant.now()
và ZonedDateTime.now()
được yêu cầu API 26
Để ge thời gian hiện tại bạn có thể sử dụng System.currentTimeMillis()
đó là tiêu chuẩn trong Java. Sau đó, bạn có thể sử dụng nó để tạo một ngày
Date currentDate = new Date(System.currentTimeMillis());
Và như được đề cập bởi những người khác để tạo ra một thời gian
Time currentTime = new Time();
currentTime.setToNow();
Cannot resolve constructor Date()
trong Android, SDK Android sử dụng hỗn hợp Java 6 và 7.
Date currentDate = new Date(System.currentTimeMillis());
là chính xác
new Date(System.currentTimeMillis())
không đúng: (a) nó là dư thừa, vì đó là chính xác như new Date()
. (b) Lớp rắc rối java.util.Date
hiện được thay thế bởi java.time.Instant
Java 8 trở lên. Đã chuyển ngược sang Java 6 & 7 trong dự án ThreeTen-Backport và cho Android trước đó (<26) trong ThreeTenABP .
Bạn có thể sử dụng mã:
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());
Đầu ra:
2014-11-11 00:47:55
Bạn cũng có thêm một số tùy chọn định dạng cho SimpleDateFormat
từ đây .
java.util.Date
, java.util.Calendar
và java.text.SimpleDateFormat
bây giờ là di sản , thay thế bởi sự java.time class built vào Java 8 và sau đó. Xem Hướng dẫn của Oracle .
Dễ dàng, bạn có thể phân tích thời gian để có được các giá trị riêng cho thời gian hiện tại, như sau:
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);
Tương tự như vậy đối với ngày, như sau:
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);
Có một số tùy chọn vì Android chủ yếu là Java, nhưng nếu bạn muốn viết nó trong textView, đoạn mã sau sẽ thực hiện thủ thuật:
String currentDateTimeString = DateFormat.getDateInstance().format(new Date());
// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
Calendar
hoặc GregorianCalendar
. Các Date
lớp bị phản đối.
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
Mẫu định dạng ngày
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);
Đây là một phương pháp sẽ hữu ích để có được ngày và thời gian:
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;
}
Bạn có thể gọi phương thức này và nhận các giá trị ngày và giờ hiện tại:
2017/01//09 19:23
SimpleDateFormat
giây và Date
... bạn không thể sử dụng "yyyy/MM/dd HH:mm"
làm định dạng và lịch gọi một lần?
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);
Đối với ngày và giờ hiện tại có định dạng, Sử dụng
Trong Java
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)
Ở 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)
}
Mẫu định dạng ngày
"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
lớp lỗi thời nổi tiếng và rắc rối . Ngay cả trước khi Oreo bạn không cần, thay vào đó, bạn có thể sử dụng ThreeTenABP , backport của java.time, API ngày và giờ Java hiện đại.
Nếu bạn cần ngày hiện tại:
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);
Nếu bạn cần thời gian hiện tại:
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));
Đối với định dạng ngày giờ tùy chỉnh:
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ",Locale.ENGLISH);
String cDateTime=dateFormat.format(new Date());
Đầu ra giống như định dạng dưới đây: 2015-06-18T10: 15: 56-05: 00
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
Time now = new Time();
now.setToNow();
Hãy thử điều này làm việc cho tôi là tốt.
Bạn có thể có được ngày bằng cách sử dụng:
Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");
Điều này sẽ cung cấp cho bạn một kết quả trong một hình thức đẹp, như trong ví dụ này: "2014/02/09".
Time t = new Time();
sẽ sử dụng múi giờ mặc định. Theo kinh nghiệm của tôi, mặc định == hiện tại.
Vâng, tôi đã gặp vấn đề với một số câu trả lời của API nên tôi hợp nhất mã này, tôi hy vọng nó phục vụ họ:
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);
Đầu ra: 03:25 PM - 2017/10/03
Bạn chỉ có thể sử dụng mã sau đây:
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());
Thử cái này
String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
Phương pháp bên dưới sẽ trả về ngày và giờ hiện tại trong Chuỗi, Sử dụng múi giờ khác theo múi giờ thực tế của bạn. Tôi đã sử dụng 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);
}
Bạn nên sử dụng lớp Calender theo API mới. Ngày lớp không được dùng nữa.
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);
Hãy thử sử dụng mã dưới đây:
Date date = new Date();
SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());
String currentDate = dateFormatWithZone.format(date);