Khi nghĩ về ngày và thời gian - là nửa đêm hôm nay trong quá khứ hay tương lai?


9

Đây luôn là một câu đố đối với tôi - và tôi nhận ra rằng nó không hoàn toàn là một vấn đề trong lập trình hoặc phát triển phần mềm, nhưng nó dường như là một vấn đề phổ biến hợp lý trong lĩnh vực của chúng tôi.

Ví dụ: nếu tôi đặt thời gian hết hạn là 2011-04-08 00:00:00 - và cho giờ địa phương hiện tại của tôi là 10:45 ngày 8 - tôi đã hết hạn chưa? Hay tôi vẫn còn nửa ngày nữa?

Có tiêu chuẩn chung nào cho đến cuối ngày nửa đêm 'thuộc về' không?

Hay tôi nên lấy một lá từ quân đội Anh, và nói rằng ngày kết thúc lúc 23:59:59 và bắt đầu lúc 00:00:01 và không có nửa đêm?


chờ đợi, vị trí của bạn ở đâu? bây giờ là ngày mấy 08 hay 07?
Sufendy

sry - nói rõ hơn rằng tôi đã ở vào ngày 8 (Tôi đang ở Adelaide, SA)
HorusKol

1
Vì vậy, về cơ bản bạn đang hỏi là 00:00:00 nhỏ hơn hoặc lớn hơn 10:45:00?
Martin York

Tôi sẽ lấy chiếc lá. Nhiều tổ chức liên quan đến lịch trình tránh 00:00:00 (và 12:00:00). Cũng có một số nhầm lẫn về người chỉ định AM / PM cho những quốc gia không sử dụng đồng hồ 24 giờ.
dbasnett

Trong một số bối cảnh 24:00:00được sử dụng để mô tả nửa đêm vào cuối ngày.
CodeInChaos

Câu trả lời:


17

Tôi nghĩ rằng trong lập trình (oracle và php, không chắc chắn về các ngôn ngữ khác), nửa đêm là khởi đầu của một ngày. Ví dụ: nếu bạn cắt (sysdate), bạn sẽ nhận được 2011-04-08 00:00:00, đó là quá khứ của chúng tôi.

vì vậy, khi đồng hồ thay đổi từ 23:59:59 sang 00:00:00, ngày thực sự thay đổi từ 2011-04-08 thành 2011-04-09


2
Vâng, ngày trôi qua lúc nửa đêm, tức là 00:00:00.
quick_now

Đây là AFAIK chính xác. Một sự nhầm lẫn có thể là trong lời nói bình thường, "nửa đêm hôm nay" có lẽ có nghĩa là nửa đêm vào cuối ngày hôm nay, bởi vì điều đó có nhiều khả năng là trước khi mọi người đi ngủ, hơn là sau khi họ thức dậy.
Jack V.

3

Một phụ lục cho câu trả lời của @Phelios, nếu bạn có thời gian như 00:00:00, thì điều này không nhất thiết là nửa đêm. Thay vào đó, nó là một tập hợp các điểm thời gian vô cùng lớn, tất cả đều có khoảng cách tối đa <1 giây với nhau. Ví dụ: tất cả 00: 00: 00.345, 00: 00: 00.567 và 00: 00.842 rõ ràng nằm ở phía ngày mới của nửa đêm, nhưng sẽ được rút ngắn thành "00:00:00" cho mục đích hiển thị. Tương tự như vậy, 23: 59: 59: 899 nằm ở phía cũ của nửa đêm. Vì vậy, nửa đêm là một khoảng thời gian ngắn vô hạn giữa những ngày mà bạn sẽ không bao giờ đạt được trong thực tế.


Đây là một lần rất quan trọng để gọi ra sự khác biệt giữa lý thuyếtthực tiễn 'bị cáo buộc' : Trong thực tế, người dùng gõ một ngày / giờ hầu như không thể bận tâm để gõ giây; huống chi là mili giây. Trong thực tế, một thiết bị thời gian xác định thời gian của một sự kiện có thể không hỗ trợ mili giây. Trong thực tế ngay cả khi một thiết bị thời gian không hỗ trợ mili giây, không có gì đảm bảo định dạng lưu trữ không làm tròn / cắt bớt một phần thời gian vì một số lý do.
vỡ mộng

1

Đây là một vấn đề tương tự với việc tính toán sự khác biệt giữa các góc bằng hình học tròn, ví dụ, 0 độ và 360 độ (và 720 độ, v.v.) đều giống nhau. Vậy sự khác biệt giữa 350 độ và 10 độ là gì?

Trả lời: tùy thuộc vào cách bạn muốn đo xung quanh - có thể là 20 độ hoặc 340 độ. Nhưng thực hiện tính toán cho sự khác biệt góc thực sự khá lộn xộn. Calcs chênh lệch thời gian tương tự lộn xộn trừ khi bạn chuyển đổi sang một hình thức bên trong làm cho phép cộng và phép trừ hoạt động theo quy ước. Hoặc bạn sử dụng một thư viện lớp hiện đại che giấu nó một cách kỳ diệu khỏi bạn (và do đó không bao giờ dạy cho bất kỳ ai về các chi tiết thực tế).


trong cả hai trường hợp, bạn chỉ xác định một chiều quanh đồng hồ (hoặc vòng tròn) là 'dương'
HorusKol

Thật. Tuy nhiên, viết mã để thực hiện calc và làm cho nó đúng mỗi lần đòi hỏi một chút suy nghĩ.
quick_now
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.