Làm cách nào để chuyển ngày hiện tại thành chuỗi trong Java?
Làm cách nào để chuyển ngày hiện tại thành chuỗi trong Java?
Câu trả lời:
String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
// GET DATE & TIME IN ANY FORMAT
import java.util.Calendar;
import java.text.SimpleDateFormat;
public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";
public static String now() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(cal.getTime());
}
Lấy từ đây
Calendar
đáng mong đợi hơn Date
?
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();
Sử dụng một DateFormat
triển khai; vd SimpleDateFormat
.
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String data = df.format(new Date());
LocalDate.now()
.toString()
2017-01-23
Tốt hơn là chỉ định múi giờ mong muốn / dự kiến một cách rõ ràng.
LocalDate.now( ZoneId.of( "America/Montreal" ) )
.toString()
Cách hiện đại của Java 8 trở lên là với khuôn khổ java.time .
Chỉ định múi giờ, vì ngày thay đổi trên khắp thế giới vào bất kỳ thời điểm nào.
ZoneId zoneId = ZoneId.of( "America/Montreal" ) ; // Or ZoneOffset.UTC or ZoneId.systemDefault()
LocalDate today = LocalDate.now( zoneId ) ;
String output = today.toString() ;
2017-01-23
Theo mặc định, bạn nhận được một Chuỗi ở định dạng ISO 8601 tiêu chuẩn .
Đối với các định dạng khác, hãy sử dụng java.time.format.DateTimeFormatter
lớp.
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, hãy xem Hướng dẫn Oracle . Và tìm kiếm Stack Overflow để có 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 mình. 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.
Lấy các lớp java.time ở đâu?
Các ThreeTen-Extra dự án mở rộng java.time với các lớp bổ sung. Dự án này là cơ sở chứng minh cho những bổ sung có thể có trong tương lai cho java.time. Bạn có thể tìm thấy một số các lớp học hữu ích ở đây chẳng hạn như Interval
, YearWeek
, YearQuarter
, và nhiều hơn nữa .
Nhanh hơn:
String date = FastDateFormat.getInstance("dd-MM-yyyy").format(System.currentTimeMillis( ));
Trong thời gian là YYYY-MM-dd
String time = new DateTime( yourData ).toString("yyyy-MM-dd");
Và Thư viện DateTime là:
nhập org.joda.time.DateTime;
DateTime
nào? Câu trả lời về Stack Overflow nên có một số giải thích vì trang web này không chỉ là một thư viện đoạn mã.
Hầu hết các câu trả lời đều hợp lệ. Sửa đổi API JAVA mới cho xử lý ngày tháng đã đảm bảo rằng một số sự không rõ ràng trước đó trong xử lý ngày tháng java được giảm bớt.
Bạn sẽ nhận được thông báo không dùng nữa cho các cuộc gọi tương tự.
new Date() // deprecated
Lời gọi trên đã cho nhà phát triển giả định rằng một đối tượng Date mới sẽ cung cấp cho đối tượng Date với dấu thời gian hiện tại. Hành vi này không nhất quán trên các lớp API Java khác.
Cách mới để thực hiện việc này là sử dụng Phiên bản lịch .
new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()
Ở đây, quy ước đặt tên không phải là hoàn hảo nhưng điều này được tổ chức nhiều. Đối với một người như tôi, người gặp khó khăn trong việc nghiên cứu mọi thứ nhưng sẽ không bao giờ quên điều gì đó nếu nó nghe có vẻ hợp lý, đây là một cách tiếp cận tốt.
Điều này đồng nghĩa với cuộc sống thực hơn
Một cách khác để làm điều này là sử dụng API thời gian của Joda
new DateTime().toString("yyyy-MM-dd")
hoặc rõ ràng hơn nhiều
new DateTime(Calendar.getInstance().getTime()).toString("yyyy-MM-dd")
cả hai sẽ trả về cùng một kết quả.
java.util.Date
, java.util.Calendar
và java.text.SimpleTextFormat
bây giờ là di sản , thay thế bởi sự java.time lớp. Ngoài ra, dự án Joda-Time hiện đang ở chế độ bảo trì , với nhóm tư vấn chuyển sang java.time.
Clock
triển khai trong Java 8 hoàn toàn giống với các lớp kế thừa. Chỉ trong Java 9 mới có một triển khai mới, có khả năng ghi lại khoảnh khắc hiện tại với độ phân giải tốt như nano giây.
public static Date getDateByString(String dateTime) {
if(dateTime==null || dateTime.isEmpty()) {
return null;
}
else{
String modified = dateTime + ".000+0000";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date dateObj = new Date();
Date dateObj1 = new Date();
try {
if (dateTime != null) {
dateObj = formatter.parse(modified);
}
} catch (ParseException e) {
e.printStackTrace();
}
return dateObj;
}
}
String
định dạng nào cho hàm của mình.