Tôi đang phát triển một phần mềm quốc tế hoạt động như một phần mềm quản lý dự án đơn giản và tôi đang gặp phải sự cố. Vấn đề này là về ngày/giờ và múi giờ.
Khi thư được gửi từ một múi giờ sang múi giờ khác, tôi có thể lưu trữ thời gian UTC (GMT) trong cơ sở dữ liệu của mình và sau đó hiển thị thông báo theo múi giờ của người dùng. Nhưng điều này không thể được thực hiện khi tôi chỉ làm việc với ngày.
Nếu tôi nói một nhiệm vụ là vào ngày 21 tháng 3. Tôi có nên xem xét rằng ngày này có thể là 20 hoặc 22 ở một số quốc gia khác không? Lời khuyên của bạn về vấn đề này là gì?Tôi làm cách nào để xử lý ngày và giờ theo múi giờ khác nhau?
Trả lời
Giả sử người dùng ở New York đặt ngày đến hạn cho dự án là "bất cứ lúc nào vào thứ Hai ngày 26 tháng 1". Điều đó có nghĩa là "bất cứ lúc nào từ 0600 Thứ Hai, 26 Tháng 1 đến 0600 Thứ Ba, ngày 27 tháng 1" tại Brussels và "bất kỳ lúc nào từ ngày Chủ Nhật 25 tháng 1 đến 2000 thứ Hai ngày 26 tháng 1" tại LA
Vì vậy, hoàn thành nhiệm vụ vào lúc 2100 ngày thứ Hai 26 là tốt tại Brussels và NY, nhưng đã quá muộn tại LA
Một công việc có thể xung quanh không bao giờ chỉ hoạt động với ngày tháng. Nếu thời gian không được chỉ định, hãy đặt thời gian cho 0000 hoặc 24 giờ vào ngày được chỉ định trong múi giờ của người dùng.
Người dùng có thể phải đối phó với các ngày/thời gian đến hạn kỳ lạ, nhưng nói như một người từng làm việc quốc tế, nó đi với lãnh thổ.
Bạn sẽ không thể đạt được những gì bạn đang cố gắng làm mà không lưu trữ thời gian chính xác. Bạn chỉ đơn giản là không có đủ thông tin.
Khi bạn không có thời gian, hãy giả sử thời gian kết thúc doanh nghiệp ở ngôn ngữ chính của ứng dụng, sau đó dịch thời gian đó theo bất kỳ lúc nào khác. Một thay thế sẽ được giả định kết thúc của ngày làm việc trong thời gian địa phương và điều chỉnh đó để UTC. Tất cả mọi người sử dụng ứng dụng sẽ cần phải hiểu bất cứ điều gì giả định thời gian mặc định bạn thực hiện khi thời gian không được chỉ định. Phối hợp với văn phòng chính có thể là tốt nhất trong một doanh nghiệp lớn trong khi phối hợp với thời gian địa phương có thể là tốt nhất trong môi trường phi tập trung cao, nơi bối cảnh địa phương cũng quan trọng không kém.
Cuối ngày trong UTC sẽ phản trực giác với người đặt ngày đến hạn (trừ khi tất nhiên, họ đã sống trong thời gian ZULU). – officemonkey
@officemonkey - đó là lý do tại sao nó không phải là gợi ý đầu tiên của tôi. Tôi cho rằng sẽ tốt hơn nếu bạn chọn ngày kết thúc của ngày làm việc theo giờ địa phương và điều chỉnh điều đó cho mọi người khác. Điều đó có lẽ có ý nghĩa nhất đối với người vào nhiệm vụ. Tôi sẽ điều chỉnh câu trả lời. – tvanfosson
Kết thúc kinh doanh quá mơ hồ. –
Giải pháp dễ nhất sẽ chỉ để hiển thị là cùng ngày cho mọi người. Thời hạn sau đó sẽ có hiệu lực vào nửa đêm trong múi giờ mới nhất.
Nếu không, hãy quyết định thời gian mặc định của thời hạn phải ở trong múi giờ mà tác vụ được tạo, ví dụ: Ngày 21 tháng 3 lúc 17:00 EST hoặc 22 tháng 3 00:00 EST và hiển thị trong múi giờ địa phương. Sự khác biệt múi giờ sau đó sẽ đẩy nó vào ngày hôm trước hoặc ngày hôm sau cho phù hợp với người xem.
Nếu bạn có một phiên bản DB, tôi sẽ lưu trữ tất cả các ngày trong dấu thời gian datetime của máy chủ DB của bạn. Nếu bạn đang định thời gian hàng, hãy xem xét GetDate() trong T-SQL hoặc làm giá trị mặc định của cột ngày được định thời gian. Sau đó, bạn có điểm tham chiếu duy nhất của bạn cho tất cả các lần. Hãy xem xét định dạng UTC ở đó.
Sau đó, tất cả khách hàng truy cập vào ngày làm chuyển đổi của riêng mình vào "giờ địa phương", có thể được giải thích bởi những thứ như: sở thích người dùng, ngày thời gian tem trên máy tính của khách hàng, vv
Mà không biết thêm, nó khó nói chính xác độ phân giải là gì.
SQL 2008 cho phép một kiểu dữ liệu ngày không có bất kỳ giá trị thời gian nào liên kết với nó. Điều đó cho phép một người nào đó nói rằng tôi cần điều này được thực hiện bởi ngày này, nhưng tôi không quan tâm nếu nó là +/- vài giờ. Nếu ngày được chọn là 1/1/2009 nhưng nó xảy ra vào ngày 1/2/2009 lúc 2 giờ sáng, họ có lẽ không quan tâm.
Khi người dùng cần điều gì đó được thực hiện trước ngày và giờ cụ thể, như đóng doanh nghiệp vào ngày 1/1/2009 thì bạn cần lưu trữ nó trong một DateTime dưới dạng UTC và chuyển đổi sang thời gian khách hàng cục bộ.
Điều này sẽ mất nhiều sự phức tạp để chỉ ra khi một thứ gì đó được hoàn thành, nó sẽ được hoàn thành gần một ngày cụ thể hoặc theo thời gian cụ thể.
Nếu bạn không lưu trữ số phút và giây, bạn phải giả định rằng ngày được nhập là ngày bạn muốn và không áp dụng bất kỳ điều chỉnh nào cho GMT. Chỉ cần đặt nó trong cơ sở dữ liệu như vậy. Những người trên bờ biển phía tây sẽ phải giả định rằng ngày đến hạn là như nhau bất kể bạn đang ở đâu trên thế giới. Nếu bạn muốn điều chỉnh múi giờ, bạn sẽ phải thu thập thêm thông tin, như giờ, phút và giây.
Giải pháp của bạn tùy thuộc vào ứng dụng và yêu cầu của bạn.
Lần đầu tiên tôi lưu trữ tỷ lệ chênh lệch UTC + trong cấu trúc dữ liệu của bạn, do đó dễ dàng hiển thị cho bất kỳ múi giờ nào.
Rất có thể nếu nhiệm vụ hoặc cuộc họp đến hạn vào lúc 12 giờ tối ngày 21/3 tại Luân Đôn thì sẽ xảy ra vào 21:30 ngày 21/3 tại Adelaide (+0930), nhưng đó là yêu cầu ứng dụng không phải bất kỳ tiêu chuẩn liên quan đến múi giờ nào .
Nếu bạn muốn tính linh hoạt tối đa, hãy thêm cờ có thể thực hiện đồng thời đồng thời ở mọi múi giờ hoặc cùng một lúc bất kể bạn ở đâu (so le) và hiển thị sự kiện tương ứng.
Bạn có thể muốn lưu trữ ngày trong đó nhận biết múi giờ. Điều này sẽ giúp bạn trong tính toán của bạn. Ví dụ, SQL Server 2008 hỗ trợ datetimeoffset that does precisely this. Ngoài ra, nếu bạn đang sử dụng SQL 2005 với một chút nỗ lực, bạn có thể viết loại dữ liệu SQL CLR của riêng bạn để hỗ trợ điều này.
- 1. Xử lý ngày tháng và múi giờ, với Zend_Date
- 2. Cách chuyển đổi ngày giờ từ múi giờ này sang múi giờ khác
- 3. Làm cách nào để xử lý các múi giờ trong ứng dụng web của tôi?
- 4. Nhận ngày giờ cho múi giờ khác Bất kể múi giờ địa phương
- 5. Xử lý múi giờ trong bộ nhớ?
- 6. ExtJS ngày và múi giờ
- 7. Làm thế nào để bạn chuyển đổi ngày/giờ từ một múi giờ này sang múi giờ khác trong R?
- 8. Nhận ngày và giờ khác nhau theo ngày, giờ, phút và giây trong Android
- 9. Chuyển đổi ngày thành múi giờ khác nhau
- 10. Cách tốt nhất để xử lý múi giờ bằng Javascript
- 11. Làm cách nào để quản lý múi giờ trong Sitecore?
- 12. Javascript ngày mới xử lý khác nhau theo phong cách ngày khác nhau?
- 13. Làm cách nào để kết hợp ngày và giờ nhận biết múi giờ bằng Python?
- 14. Ngày xử lý TSQL từ ngày giờ
- 15. Python: hiển thị thời gian theo múi giờ khác nhau
- 16. Ngày giờ Mysql với múi giờ
- 17. Đặt NSDate thành ngày, giờ và múi giờ cụ thể
- 18. Tôi làm cách nào để tổng hợp dữ liệu theo ngày và múi giờ vẫn tuân theo?
- 19. Múi giờ cho những người dùng khác nhau
- 20. Chuyển đổi thời gian và ngày tháng từ múi giờ này sang múi giờ khác trong PHP
- 21. Ngày PostgreSQL() với múi giờ
- 22. Kiểm tra xử lý múi giờ chính xác
- 23. Đấu tranh với cách so sánh giờ với các múi giờ khác nhau trong Java?
- 24. Làm thế nào để chuyển đổi một ngày giờ thành múi giờ cụ thể trong C#?
- 25. Cách nhận chênh lệch múi giờ (tính theo giờ) giữa 2 ngày
- 26. Java: Múi giờ lý do tại sao múi giờ khác nhau cho cùng một giá trị bằng millisec
- 27. Đường ray - Chọn ngày theo múi giờ được chỉ định
- 28. DateTime.Ticks, DateTime.Equals và múi giờ
- 29. Cách tính giờ theo giờ giữa hai ngày trong iOS
- 30. Tôi làm cách nào để “tách rời” một ngày trong một múi giờ cụ thể?
Tôi có thể đặt một plug không biết xấu hổ cho câu hỏi liên quan (nhưng khác biệt) của tôi về cách kiểm tra xử lý múi giờ chính xác không? http://stackoverflow.com/questions/477965/testing-correct-timezone-handling –
Bạn phải tìm thấy nó thú vị rằng nếu bạn tìm kiếm trên các thẻ "bản địa hóa" hoặc "quốc tế hóa", bạn chỉ nhận được hai câu hỏi, nhưng nếu bạn tìm kiếm về "bản địa hóa" hoặc "quốc tế hóa", bạn nhận được đống! – Evan