2012-02-02 37 views
19

Tôi nghĩ tôi có thể tạo ra một GregorianCalendar bằng cách sử dụng hàm tạo phải mất năm, tháng và ngày, nhưng tôi không thể nhận được các trường đó từ một trường hợp của lớp java.sql.Date một cách đáng tin cậy. Các phương pháp đó có được những giá trị từ java.sql.Date đang bị phản đối, và mã sau đây cho thấy tại sao họ không thể được sử dụng:Làm thế nào để chuyển đổi một đối tượng java.sql.Date thành một GregorianCalendar?

import java.sql.Date; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class DateTester { 

    public static void main(String[] args) { 
     Date date = Date.valueOf("2011-12-25"); 
     System.out.println("Year: " + date.getYear()); 
     System.out.println("Month: " + date.getMonth()); 
     System.out.println("Day: " + date.getDate()); 
     System.out.println(date); 

     Calendar cal = new GregorianCalendar(date.getYear(), date.getMonth(), date.getDate()); 
     System.out.println(cal.getTime()); 
    } 
} 

Dưới đây là đầu ra, cho thấy tháng và năm không trở lại một cách chính xác từ các phản getYear()getMonth() phương pháp Date:

Năm: 111
Tháng: 11
ngày: 25
2011-12-25
Thu 25 tháng 12 00:00:00 EST 111

Vì tôi không thể sử dụng các nhà xây dựng mà tôi đã cố gắng trên, và không có GregorianCalendar xây dựng mà chỉ mất một Date, làm thế nào tôi có thể chuyển đổi một đối tượng java.sql.Date thành một GregorianCalendar?

Trả lời

32

Bạn phải thực hiện việc này theo hai bước. Đầu tiên tạo một GregorianCalendar bằng cách sử dụng hàm tạo mặc định, sau đó đặt ngày bằng cách sử dụng phương thức (có tên gây nhầm lẫn) setTime.

import java.sql.Date; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class DateTester { 

    public static void main(String[] args) { 
     Date date = Date.valueOf("2011-12-25"); 
     System.out.println(date); 

     Calendar cal = new GregorianCalendar(); 
     cal.setTime(date); 
     System.out.println(cal.getTime()); 
    } 
} 

Dưới đây là kết quả:

2011-12-25
Sun 25 tháng 12 00:00:00 EST 2011

3

Tôi sẽ từ bộ nhớ, nhưng có bạn đã thử

Calendar cal = GregorianCalendar.getInstance(); 
cal.setTime(rs.getDate()); 
+1

Từ nơi rs.getDate() đến từ đâu? –

+1

xin lỗi - rs là tên biến tôi luôn cung cấp cho các đối tượng ResultSet - nó chỉ ở đó để biểu diễn một cá thể java.sql.Date mà bạn đã khởi tạo. – DaveH

+0

Không thực sự là câu trả lời cụ thể nhất, nhưng +1 để theo dõi một số tiêu chuẩn đã làm cho mã này chính xác mà tôi đang tìm kiếm. – KjetilNordin

4

Hãy thử điều này.

import java.sql.Date; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class DateTester { 

    public static void main(String[] args) { 
     Date date = Date.valueOf("2011-12-25"); 
     System.out.println(date); 

     Calendar cal = new GregorianCalendar(); 
     cal.setTime(date); 
     System.out.println(cal.getTime()); 
    } 
} 
1

Sử dụng setTimeInMillis():

java.sql.Date date = new java.sql.Date(System.currentTimeMillis()); 
Calendar cal = new GregorianCalendar(); 
cal.setTimeInMillis(date.getTime()); 

Tôi nghĩ rằng đây là cách đơn giản nhất.

Các vấn đề liên quan