2013-10-11 18 views
6

Với JodaTime, không sử dụng chức năng 'cộng' hoặc 'trừ' và sử dụng ít dòng mã nhất, làm cách nào để đặt ngày mới mà không sửa đổi thời gian?Sửa đổi ngày mà không sửa đổi thời gian

nỗ lực đầu tiên của tôi là để lưu trữ các 'thời gian' bộ phận của DateTime ở riêng int s sử dụng getHoursOfDay()getMinutesOfHour() vv - sau đó tạo ra một mới DateTime với ngày yêu cầu và thiết lập giờ, phút và giây trở lại. Nhưng phương pháp này là khá clunky, và tôi đã tự hỏi nếu có một phương pháp ít tiết để làm điều này - lý tưởng chỉ với một dòng mã.

Ví dụ:

22/05/2013 13:40:02 >>>>30/08/2014 13:40:02

+0

Tôi đã bỏ phiếu để đóng như chủ yếu dựa vào ý kiến. Con đường "dễ nhất" để giải quyết một vấn đề là chủ quan. Nếu thay vào đó bạn có nghĩa là "* Tôi không biết làm thế nào để thay đổi ngày/tháng/năm bạn có thể chỉ cho tôi? *", Sau đó chỉnh sửa câu hỏi của bạn để làm cho rõ ràng. Trong trường hợp đó, vui lòng bao gồm nỗ lực tốt nhất của bạn. –

+2

'Dễ nhất' đã thay đổi thành' Đơn giản nhất ', ít chủ quan hơn –

+0

Để làm rõ, tôi biết một vài cách để làm điều này, nhưng chúng rất dài và khó khăn. Tôi đang tìm cách xem liệu có ai có phương pháp tiếp cận thực sự có sẵn trong luồng không. –

Trả lời

1

Câu trả lời được chấp nhận trước đây đã bị người kiểm duyệt xóa vì nó chỉ chứa liên kết tới javadoc. Đây là phiên bản đã chỉnh sửa.


Bạn có thể làm điều đó như

DateTime myDate = ... 
myDate.withDate(desiredYear, desiredMonth, desiredDayOfMonth); 

javadoc này là ở đây: DateTime.withDate(int year, int month, int dayOfMonth)

2

là JodaTime bắt buộc? Cách cơ bản để thực hiện việc này là 1. trích xuất chỉ thời gian từ dấu thời gian. 2. thêm địa chỉ này vào ngày chỉ


long timestamp = System.currentTimeMillis(); //OK we have some timestamp 
long justTime = timestamp % 1000 * 60 * 60 * 24;// just tiem contains just time part 


long newTimestamp = getDateFromSomeSource();//now we have date from some source 
justNewDate = newTimestamp - (newTimestamp % 1000 * 60 * 60 * 24);//extract just date 

result = justNewDate + justTime; 

Điều gì đó tương tự.

+0

Những nỗ lực trước đây của tôi trong việc giải quyết điều này chỉ đúng như gợi ý của bạn, tuy nhiên bạn đã giải quyết vấn đề bằng phương pháp hoàn toàn không mong muốn, vì vậy +1 cho điều đó :) –

+0

Điều này không tính đến khoản tiết kiệm ánh sáng ban ngày. – SpaceTrucker

1

sử dụng withFields như thế này:

new DateTime().withFields(new LocalDate(2000,1,1)) 

này sẽ đặt tất cả các lĩnh vực thời gian ngày DateTime để những người được chứa trong LocalDate - năm, tháng và ngày trong trường hợp này. Điều này sẽ làm việc với bất kỳ hoạt động ReadablePartial nào chẳng hạn như YearMonth chẳng hạn.

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