Làm thế nào để chuyển đổi ngày hiện tại thành chuỗi trong java?


Câu trả lời:


215
String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());

Đã sử dụng kết hợp câu trả lời này và câu trả lời ngay bên dưới để tính thời gian. C:
php_coder_3809625

@Ian Purton Có phải là ngày chuỗi theo UTC tz ..?
Kanagavelu Sugumar

FYI, những lớp rắc rối này bây giờ là kế thừa, được thay thế bởi các lớp java.time. Xem Hướng dẫn Oracle .
Basil Bourque

62
// 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


Phản hồi tốt nhất cho việc sử dụng Lịch thay vì Ngày.
ngẫu nhiên

5
Tôi bối rối. Trong vũ trụ nào Calendarđáng mong đợi hơn Date?
jasonmp85

1
FYI, những lớp rắc rối này bây giờ là kế thừa, được thay thế bởi các lớp java.time. Xem Hướng dẫn Oracle .
Basil Bourque

27
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();

58
Xin lỗi vì đã làm quá nhiều.
jasonmp85,

2
Định dạng được sử dụng bởi phương pháp đó là khủng khiếp. Ngoài ra, múi giờ mặc định hiện tại của KVM của bạn được áp dụng ngầm, vì vậy kết quả của bạn sẽ khác nhau. Và những lớp rắc rối này bây giờ là kế thừa, được thay thế bởi các lớp java.time. Xem Hướng dẫn Oracle .
Basil Bourque


14

tl; dr

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() 

java.time

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.DateTimeFormatterlớp.


Giới thiệu về java.time

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 .



1

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;


Và từ thư viện DateTimenà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ã.
Basil Bourque

0

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

  1. Chúng tôi nhận được một đối tượng Lịch và chúng tôi tìm kiếm thời gian trong đó. (chắc hẳn bạn đang thắc mắc rằng không có cơ thể nào lấy được thời gian từ Lịch, đó là lý do tại sao tôi đã nói rằng nó không hoàn hảo. Nhưng đó hoàn toàn là một chủ đề khác)
  2. Sau đó, chúng tôi muốn ngày ở định dạng Văn bản đơn giản vì vậy chúng tôi sử dụng lớp tiện ích SimpleDateFormat giúp chúng tôi định dạng Ngày từ Bước 1. Tôi đã sử dụng yyyy, MM, dd làm các tham số trong định dạng. Các thông số định dạng ngày được hỗ trợ

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ả.


FYI, người già lớp ngày thời gian phiền hà như java.util.Date, java.util.Calendarjava.text.SimpleTextFormatbâ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.
Basil Bourque

1
@BasilBourque Đó là ý tôi trong câu trả lời của mình, rằng câu trả lời được bình chọn nhiều nhất là đúng nhưng không liên quan đến một nhà phát triển hiện nay. Cuối cùng java sẽ có một lớp Đồng hồ và Clock.getTime () sẽ bắt chước cuộc sống thực và hợp lý hơn nhiều so với các lớp Date hoặc DateTime hoặc Time. Các nhà phát triển Java cần biết rằng OOPS bắt đầu như một thứ gì đó bắt chước các tình huống thực tế.
Swapnil Vargaonkar

FYI, việc Clocktriể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.
Basil Bourque

Vâng, đó là lý do tôi đã viết "cuối cùng" Java sẽ có một lớp Đồng hồ sẽ bắt chước kịch bản cuộc sống thực (khái niệm OOPS) và hiển thị / chụp (theo cách bạn muốn nói) thời điểm hiện tại.
Swapnil Vargaonkar

-2
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;
        }

    }

1
Một số giải thích về đoạn mã này có thể sẽ hữu ích.
Pyves

1
Câu trả lời không liên quan đến câu hỏi. Và Không, bạn không thể chuyển ngày ở bất kỳ Stringđịnh dạng nào cho hàm của mình.
Jerin Joseph
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.