Tôi nhận được kết quả không mong muốn khi sử dụng DateTime.ParseExact. Đây là mã thử nghiệm của tôi:Sử dụng DateTime.ParseExact để chỉ nhận thời gian (không có ngày)
Dim MinVal As DateTime = #12:00:01 AM#
Dim MaxVal As DateTime = #11:59:59 PM#
Dim TooBig1, Equal1 As Boolean
Dim TooBig2, Equal2 As Boolean
Dim dt1 As DateTime = #12:00:01 AM#
Dim dt2 As DateTime = DateTime.ParseExact("12:00:01 AM", "hh:mm:ss tt", Globalization.DateTimeFormatInfo.InvariantInfo)
TooBig1 = (dt1.CompareTo(MaxVal) > 0)
Equal1 = (dt1.CompareTo(MinVal) = 0)
TooBig2 = (dt2.CompareTo(MaxVal) > 0)
Equal2 = (dt2.CompareTo(MinVal) = 0)
Kết quả là tốt cho dt1:
- nó cho thấy trong trình gỡ lỗi như # 12: 00: 01 PM # (không có ngày)
- TooBig1 là false
- Equal1 là True
Nhưng kết quả là (sai?) bất ngờ cho DT2:
- nó cho thấy trong trình gỡ lỗi như # 9/30/2011 12:00:01 #
- TooBig2 là True
- Equal2 là False
Dường như đó là vì ngày là được ParseExact thêm vào một cách hệ thống mặc dù tôi chỉ chỉ định thời gian ở định dạng.
Câu hỏi của tôi là: Làm thế nào tôi có thể đọc thời gian bằng DateTime.ParseExact?
Đó trở thành một 'đối tượng TimeSpan' Mặc dù vậy, không phải là một' DateTime'. Thực tế bạn chú ý đến chi tiết quan trọng này một lần nữa cho thấy việc sử dụng các biến không định kiểu là một thực tế khủng khiếp. – Nyerguds
@Nyerguds: Bạn nói đúng là kết quả là 'TimeSpan'. Rõ ràng đó là những gì OP muốn, hoặc anh nhanh chóng tìm ra cách để tạo ra một 'DateTime' mới từ nó. Không có biến không định kiểu trong đoạn mã đó; cả hai đều được gõ mạnh mẽ, vì trình biên dịch sẽ làm cho rõ ràng rõ ràng lần đầu tiên bạn cố gắng sử dụng 'timeOnly' như một' DateTime'. Bạn có lẽ muốn nói rằng lợi dụng suy luận kiểu là một điều xấu? –
Có, với "untyped" tôi có nghĩa là "không được nhập vào mã", điều này thực sự có nghĩa là suy luận kiểu. Đây cũng là một ví dụ hoàn hảo về nó; nó không hiển thị ở tất cả từ mã đó 'DateTime' trừ' DateTime' bằng _not_ một 'DateTime'. – Nyerguds