Làm thế nào để có được ngày hiện tại trong Java?Tương đương với DateTime.Now của C# trong Java?
Trong C# nó là DateTime.Now
.
Làm thế nào để có được ngày hiện tại trong Java?Tương đương với DateTime.Now của C# trong Java?
Trong C# nó là DateTime.Now
.
Chỉ cần tạo đối tượng Date
mới mà không có bất kỳ đối số nào; điều này sẽ gán ngày giờ hiện tại cho đối tượng mới.
import java.util.Date;
Date d = new Date();
Trong những lời của the Javadocs cho the zero-argument constructor:
Phân bổ một đối tượng Date và khởi nó để nó đại diện cho thời gian mà tại đó nó được phân bổ, được đo trong vòng miligiây gần nhất.
Hãy chắc chắn rằng bạn đang sử dụng java.util.Date
và không java.sql.Date
- sau này không có một constructor zero-arg, và có ngữ nghĩa hơi khác nhau mà là chủ đề của một cuộc trò chuyện hoàn toàn khác nhau. :)
Cũng lưu ý rằng GregorianCalendar và nhiều đối tượng tương tự hoạt động theo cùng một cách. Vì vậy, bất kỳ kiểu đối tượng ngày/lịch nào bạn đang làm việc, hàm tạo không đối số thường khởi tạo đối tượng cho ngày/giờ hiện tại. –
Từ tài liệu ngày: Kể từ JDK 1.1, lớp Lịch nên được sử dụng để chuyển đổi giữa các trường ngày và giờ và lớp DateFormat nên được sử dụng để định dạng và phân tích chuỗi ngày tháng. –
Hãy xem xét các API Java8 mới - [LocalDateTime.now() và ZonedDateTime.now()] (http://stackoverflow.com/a/26225884/513342) –
Nếu bạn tạo một đối tượng Date mới, theo mặc định nó sẽ được thiết lập đến thời điểm hiện tại:
import java.util.Date;
Date now = new Date();
Tôi thích sử dụng các đối tượng Lịch.
Calendar now = GregorianCalendar.getInstance()
Tôi thấy dễ dàng hơn khi làm việc. Bạn cũng có thể lấy đối tượng Date từ Lịch.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
Hoặc nó có thể chỉ đơn giản là 'Calendar.getInstance()' – draw
Java Date và Calendar lớp học được nhiều người xem được thiết kế kém. Bạn nên xem Joda Time, một thư viện thường được sử dụng thay cho các thư viện có sẵn trong Java.
Tương đương DateTime.Now
trong Joda Thời gian là:
DateTime dt = new DateTime();
Cập nhật
Như đã đề cập trong các ý kiến, các phiên bản mới nhất của Joda Thời gian có một DateTime.now()
phương pháp, vì vậy:
DateTime dt = DateTime.now();
Phiên bản hiện tại (2.1) của Joda dường như có một phương thức DateTime.now tĩnh() (tùy ý chấp nhận DateTimeZone hoặc Chronology). http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTime.html#now%28%29 –
Lưu ý rằng câu trả lời này đã được đăng vào năm 2010. Java 8 đã hấp thụ nhiều tính năng tốt nhất của Joda Time. Xem [tài liệu chính thức] (https://docs.oracle.com/javase/tutorial/datetime/index.html) và nhiều bài viết trực tuyến khác để biết thêm thông tin. – DavidS
java.lang.System.currentTimeMillis();
sẽ trả về ngày giờ kể từ ngày kỷ nguyên
Tốt để ghi nhật ký nhưng yêu cầu phân tích cú pháp và chuyển đổi để hiển thị cho người dùng –
import org.joda.time.DateTime;
DateTime now = DateTime.now();
Trong Java 8 đó là:
ZonedDateTime dateTime = ZonedDateTime.now();
Instant.now()
Lớp java.util.Date đã bị lỗi thời bởi java.time package (Tutorial) mới trong Java 8 trở lên. Các lớp java.util.Date/.Calendar cũ nổi tiếng phiền hà, khó hiểu và thiếu sót. Tránh chúng.
ZonedDateTime
Lấy thời điểm hiện tại trong java.time.
ZonedDateTime now = ZonedDateTime.now();
Một ZonedDateTime
đóng gói:
Nếu không xác định múi giờ, múi giờ mặc định hiện tại của JVM của bạn được chỉ định âm thầm. Tốt hơn để xác định múi giờ mong muốn/mong đợi của bạn hơn là dựa hoàn toàn vào mặc định.
ZoneId z = ZoneId.of("Pacific/Auckland");
ZonedDateTime zdt = ZonedDateTime.now(z);
Nói chung tốt hơn để có được thói quen làm việc của bạn back-end (logic kinh doanh, cơ sở dữ liệu, lưu trữ, trao đổi dữ liệu) tất cả trong UTC múi giờ. Mã ở trên dựa hoàn toàn vào múi giờ mặc định hiện tại của JVM.
Lớp Instant
đại diện cho một thời điểm trong dòng thời gian ở UTC với độ phân giải nano giây.
Instant instant = Instant.now();
Lớp Instant
là lớp xây dựng cơ bản trong java.time và có thể được sử dụng thường xuyên trong mã của bạn.
Khi bạn cần linh hoạt hơn trong định dạng, hãy chuyển đổi thành OffsetDateTime
. Chỉ định đối tượng ZoneOffset
. Đối với UTC, hãy sử dụng tiện ích constant for UTC.
OffsetDateTime odt = instant.atOffset(ZoneOffset.UTC);
Quý khách dễ dàng thích nghi với múi giờ khác để trình bày cho người dùng. Sử dụng proper time zone name, không bao giờ mã 3-4 chữ cái như EST
hoặc IST
.
ZoneId z = ZoneId.of("America/Montreal");
ZonedDateTime nowMontreal = instant.atZone(z);
Tạo biểu diễn chuỗi của giá trị ngày giờ đó, được bản địa hóa.
String output = DateTimeFormatter
.ofLocalizedDate(FormatStyle.FULL)
.withLocale(Locale.CANADA_FRENCH)
.format (nowMontreal);
Instant
Hoặc, ở lại UTC, sử dụng Instant
. Một đối tượng Instant
đại diện cho một thời điểm trên dòng thời gian, đến độ phân giải nano giây, luôn ở dạng UTC. Điều này cung cấp khối xây dựng cho một ngày giờ được khoanh vùng, cùng với việc gán múi giờ.Bạn có thể nghĩ về nó khái niệm theo cách này:
Bạn có thể trích xuất một Instant
từ một ZonedDateTime
.
Instant instantNow = zdt.toInstant();
Bạn có thể bắt đầu với Instant. Không cần chỉ định múi giờ tại đây, vì Instant
luôn ở dạng UTC.
Instant now = Instant.now();
Tôi cũng đã đăng [câu trả lời khác] (http://stackoverflow.com/a/39379431/642706) với nhiều chi tiết hơn về Câu hỏi trùng lặp. –
Java luôn nhận được hỗ trợ không đầy đủ cho các trường hợp sử dụng ngày và giờ. Ví dụ: các lớp hiện có (chẳng hạn như java.util.Date
và SimpleDateFormatter
) không an toàn với chuỗi có thể dẫn đến các vấn đề tương tranh. Ngoài ra còn có một số lỗi trong API. Ví dụ: năm trong số java.util.Date
bắt đầu vào năm 1900, tháng bắt đầu lúc 1 và ngày bắt đầu từ 0 — không bắt đầu trực quan. Những vấn đề này đã dẫn đến sự phổ biến của thư viện ngày và giờ của bên thứ ba, chẳng hạn như Joda-Time
. Để giải quyết một ngày mới và thời gian API được thiết kế cho Java SE 8.
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
Theo doc:
Phương pháp
now()
trả về hiện ngày thời gian sử dụng hệ thống đồng hồ và thời gian mặc định -zone, không rỗng. Nó có được ngày giờ hiện tại từ đồng hồ hệ thống trong múi giờ mặc định. Điều này sẽ truy vấn đồng hồ hệ thống trong múi giờ mặc định để có được ngày giờ hiện tại. Sử dụng phương pháp này sẽ ngăn chặn khả năng sử dụng một đồng hồ thay thế để thử nghiệm vì đồng hồ được mã hóa cứng.
Câu hỏi này cũ hơn [Câu hỏi này] (http://stackoverflow.com/q/5175728/642706) trước đây được đánh dấu là trùng lặp. Vì vậy, tôi đảo ngược tên gọi, mở lại Câu hỏi này và đánh dấu câu hỏi mới hơn là bản sao. –
Tiêu đề trong "trùng lặp" rõ ràng hơn và được tìm thấy dễ dàng hơn thông qua Tìm kiếm của Google – ragerdl