Triển khai lịch phi mặt đất


91

Khi đang xem xét các giải pháp cho một câu hỏi khác, tôi tự hỏi liệu có thể sử dụng Calendarlớp .NET để triển khai lịch không dựa trên các quy ước của Trái đất hay không.

Ví dụ, một ngày trên sao Hỏa dài hơn khoảng 2,7% so với một ngày ở đây trên Trái đất:

Một quy ước được sử dụng bởi các dự án tàu vũ trụ cho đến nay là theo dõi thời gian mặt trời tại địa phương bằng cách sử dụng "đồng hồ sao Hỏa" 24 giờ, trên đó giờ, phút và giây dài hơn 2,7% so với thời lượng tiêu chuẩn của chúng (Trái đất).

Có cách nào tốt để thực hiện một MarsCalendarnhư vậy mà chiều dài của một thứ hai là khác biệt so với tiêu chuẩn GregorianCalendar, và do đó có thể sử dụng DateTimecác đối tượng dựa vào nó cho tất cả các tiêu chuẩn AddDays(), AddHours()vv chức năng? (Lưu ý: Lý tưởng nhất là một giải pháp - nếu tồn tại - sẽ có thể áp dụng cho bất kỳ dạng vật thể hành tinh nào mà nó có thể xác định cả độ dài phù hợp "1 ngày" và "1 năm". Mặc dù vậy, Mars là một ví dụ tuyệt vời )


5
hmmm đó sẽ là lần đầu tiên tôi nhìn thấy người sao Hỏa phụ thuộc vào công nghệ của chúng tôi: P
user2711965

17
Phải có một huy hiệu cho "Câu hỏi hay nhất trong ngày" và điều này sẽ giành được nó!
Sean

4
@DavidKhaykin - Khi bạn nhận được bất kỳ thứ gì lớn hơn một ngày, chuyển đổi 2,7% sẽ bị phá vỡ. Giờ / phút / giây dựa trên tốc độ quay, trong khi Ngày / Tháng / Năm dựa trên tốc độ quỹ đạo. Mặt khác, Calendarđã hỗ trợ đặt số ngày tùy ý mỗi năm.
Bobson

5
FYI, nó không phải là Calendarlớp C # . Cùng một lớp có thể được sử dụng bởi VB.NET hoặc bất kỳ ngôn ngữ .NET nào khác. Đó là Calendarlớp .NET .
John Saunders

4
Đây là loại thú vị. BẤT KỲ lịch dựa trên trái đất sẽ đơn giản là vô nghĩa trong bối cảnh theo dõi thời gian trên sao Hỏa. Theo giờ Trái đất, sao Hỏa quay trong 29 giờ, 39 phút, 35 giây. Một năm sao Hỏa bằng 1.8809 năm Trái đất. Nhưng nếu sao Hỏa là hệ quy chiếu của bạn thì tất cả những điều đó đều vô nghĩa. Một ngày của bạn chỉ mất bao lâu để sao Hỏa quay quanh trục của nó một lần. Chia nó thành một số lát thuận tiện, bạn sẽ có "giờ". Chia chúng, bạn được phút, chia chúng và bạn được giây. Sự phân chia chỉ tiện dụng về mặt toán học, không có ý nghĩa gì ngoài những gì chúng ta mô tả cho chúng.
Craig

Câu trả lời:


13

Có một số lớp lịch không phải Gregorian bắt nguồn từ System.Globalization.Calendarbên trong không gian tên Toàn cầu hóa (tức là JapaneseCalendar). Bạn sẽ có thể thực hiện của riêng bạn. Tôi muốn lấy một mẫu, nhưng có 16 phương thức trừu tượng trong lớp Lịch ...

Bạn thậm chí có thể chỉ cần lấy lớp của mình từ GregorianCalendarvà ghi đè GetMilliseconds(DateTime)phương thức, trả về giá trị trả về của cơ sở nhân với 1.027d.


2
Hấp dẫn. Điều đó có lan truyền đến các khoảng tăng thời gian lớn hơn không hay tôi sẽ phải ghi đè từng bước riêng biệt?
Bobson

2
Sau khi nghiên cứu thêm một chút về các lịch khác, tôi đoán rằng GregorianCalendar và các lịch khác sử dụng thuộc tính Ticks của mỗi DateTime được chuyển cho nó để tính toán đằng sau tất cả các phương thức GetX của nó. Nó trở nên phức tạp với các giá trị DateTime, vì các thuộc tính DayOfYear, DayOfMonth và DayOfWeek được gắn với các giá trị trần thế. Không có lịch tích hợp để không gian tên System.Globalization rằng có nhiều hơn 12 tháng hoặc hơn 365 ngày (mặc dù một số có những ngày ít hơn), vì vậy tôi đoán những giá trị kẹp không thể ghi đè, vì vậy bạn có thể cần cấu trúc DateTime của riêng bạn.
Michael Hoffmann
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.