我用 PostgreSQL 把同樣的表示式轉換出來,你觀察一下.
select timestamp '2020/5/30 12:00:00 AM'
, timestamp '2020/5/30 08:30:00 AM'
, timestamp '2020/5/30 08:30:00 AM' - timestamp '2020/5/30 12:00:00 AM';
+---------------------+---------------------+----------+
| timestamp | timestamp | ?column? |
+---------------------+---------------------+----------+
| 2020-05-30 00:00:00 | 2020-05-30 08:30:00 | 8:30:00 |
+---------------------+---------------------+----------+
(1 row)
另外問一下,如果想將AM 轉成PM 怎樣的方式會比較好?
DateTime a = DateTime.Parse("2020/5/30 12:00:00 AM");
轉換為 "2020/5/30 12:00:00 PM" 的datetime
不知道你說的轉換是什麼動作? 你是要輸入,只是要調整表示法?
或是 現有資料轉換?
我建議使用 ISO8601
https://zh.wikipedia.org/wiki/ISO_8601
日期時間處理,用 AM / PM 表示法,因為受到人類口語習慣的 12點多,
還有中午,下午,有時候會執坳的轉不過來.
你可以多用幾個來測試啊.
select timestamp '2020/5/30 12:00:00 PM'
, timestamp '2020/5/30 12:00:00 AM'
, timestamp '2020/5/30 12:00:00 PM' - timestamp '2020/5/30 12:00:00 AM';
+---------------------+---------------------+----------+
| timestamp | timestamp | ?column? |
+---------------------+---------------------+----------+
| 2020-05-30 12:00:00 | 2020-05-30 00:00:00 | 12:00:00 |
+---------------------+---------------------+----------+
你可以找一個用 AM/PM 比較的電子錶,看他中午時變化.
select timestamp '2020/5/30 12:00:00 PM'
, timestamp '2020/5/30 11:59:59 AM'
, timestamp '2020/5/30 12:00:00 PM' - timestamp '2020/5/30 11:59:59 AM';
+---------------------+---------------------+----------+
| timestamp | timestamp | ?column? |
+---------------------+---------------------+----------+
| 2020-05-30 12:00:00 | 2020-05-30 11:59:59 | 0:00:01 |
+---------------------+---------------------+----------+
我每次都被這種日期弄得頭昏眼花
索性一律使用 YYYYMMDDhhnnss
經過上面兩位大大開釋
我還是不確定
到底 5/30 12:00 AM 的「凌晨」
是 5/29 跨 5/30
還是 5/30 跨 5/31
using System.IO;
using System;
class Program
{
static void Main()
{
int result;
result = DateTime.Compare(
DateTime.Parse("2020/5/30 11:59:59 AM"),
DateTime.Parse("2020/5/30 08:30:00 AM"));
Console.WriteLine("Compare:" + result);
result = DateTime.Compare(
DateTime.Parse("2020/5/30 12:00:00 AM"),
DateTime.Parse("2020/5/30 08:30:00 AM"));
Console.WriteLine("Compare:" + result);
result = DateTime.Compare(
DateTime.Parse("2020/5/30 12:00:00 PM"),
DateTime.Parse("2020/5/30 08:30:00 AM"));
Console.WriteLine("Compare:" + result);
}
}
其實認真來說。12小時制的「12:00:00 AM」是等於 24小時制的 00:00:00
將其換算成24小時制你會比較清楚。
這邊來看的確會08:30:00 AM 會比 12:00:00 AM大沒錯。
時間比對最好還是不要用12小時制比較。會容易被12搞混。
DateTime a = new DateTime(2020, 5, 30, 12, 0, 0);
DateTime b = Convert.ToDateTime("2020/05/30 AM 08:30:00");
Console.WriteLine(a);
Console.WriteLine(b.ToString());
Console.WriteLine(a > b);
Console.WriteLine(a.CompareTo(b));
Console.WriteLine((a - b).TotalHours);
輸出結果
2020/5/30 下午 12:00:00
2020/5/30 上午 08:30:00
True
1
3.5
我以為 12小時制 00:00am~11:59am, 00:00pm~11:59pm, 會有12:00am/pm??