MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào để chuyển đổi năm và tuần trong năm thu được từ truy vấn MongoDB thành ngày giờ của Joda?

ISO 8601

Joda-Time tuân theo ISO 8601 tiêu chuẩn trong xác định tuần .

  • Thứ Hai là ngày đầu tiên trong tuần.
  • Các tuần được đánh số từ 1 đến 52 hoặc 53.
  • Các số trong tuần được viết bằng chữ hoa W , chẳng hạn như W23 .
    Năm có thể được thêm vào trước, 2015-W23 .
  • Tuần # 1, W01 , chứa ngày thứ Năm đầu tiên của năm.

Theo những gì tôi biết, định nghĩa tiêu chuẩn này ngày càng phổ biến hơn trong việc sử dụng ở các quốc gia và ngành công nghiệp khác nhau.

Các tuần Chủ nhật

Tài liệu MongoDB xác định tuần là:

Theo như tôi biết, đây là một định nghĩa chủ yếu của Mỹ, không được sử dụng nhiều bên ngoài Hoa Kỳ.

Tại sao định nghĩa đó nói từ 0 đến 53? Điều đó có nghĩa là "lên đến 54 tuần". Tôi không nghĩ rằng định nghĩa này sẽ tạo ra 54 tuần trong bất kỳ năm nào, nhưng tôi chưa nghĩ kỹ.

Tại sao nên kết hợp?

Bạn thực sự không thể kết hợp hai định nghĩa. Quan tâm làm gì? Nếu mục tiêu của bạn là sử dụng định nghĩa tuần của MongoDB và thể hiện chúng theo ngày-giờ, thì hãy viết trình chuyển đổi của riêng bạn.

Lời khuyên của riêng tôi là loại bỏ định nghĩa và chức năng của MongoDB và gắn bó với định nghĩa tiêu chuẩn.

Tìm Chủ nhật

Nếu bạn muốn tìm ngày Chủ nhật bắt đầu một tuần trong thế giới của MongoDB, hãy viết hàm nhỏ của riêng bạn. Cung cấp số năm và số tuần và lấy lại DateTime. Trong trường hợp này, bạn không cần các tính năng theo tuần trong năm của Joda-Time.

Một cái gì đó như thế này.

int yearNumber = 2015;
int weekNumber = 0;

LocalDate firstWeekSunday = null;
LocalDate firstOfYear = new LocalDate ( yearNumber, 1, 1 );
if ( firstOfYear.getDayOfWeek ( ) == DateTimeConstants.SUNDAY ) {
    firstWeekSunday = firstOfYear;
} else { // ELSE not Sunday.
    firstWeekSunday = firstOfYear.minusDays ( firstOfYear.getDayOfWeek ( ) );  // Joda-Time uses standard ISO 8601 weeks, where Monday = 1, Sunday = 7.
}
LocalDate sunday = firstWeekSunday.plusWeeks ( weekNumber );

DateTimeZone zone = DateTimeZone.forID ( "America/Montreal" );
DateTime dateTime = sunday.toDateTimeAtStartOfDay ( zone );

Đổ vào bảng điều khiển.

System.out.println ( "Sunday-based week of year:" + yearNumber + " week: " + weekNumber + " starts: " + sunday + "." );
System.out.println ( "Adjusted to time zone: " + zone + " is: " + dateTime + "." );

Khi chạy.

Sunday-based week of year:2015 week: 0 starts: 2014-12-28.
Adjusted to time zone: America/Montreal is: 2014-12-28T00:00:00.000-05:00.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Khoảng cách sai trong phương pháp geonear với Doctrine MongoDB ODM

  2. Khung tổng hợp MongoDB - Đổi tên trường động

  3. Chỉ truy vấn tài liệu con và chỉ trả lại tài liệu con so khớp

  4. mongoengine - Truy vấn trên ListField của EmbeddedDocumentField

  5. CURSOR_NOT_FOUND - công việc cron của tôi bắt đầu chết dần giữa chừng