2017年1月18日 星期三

[研究] [C#] [ASP.NET] 除去日期格式中的 "上午"、"下午"

[研究] [C#] [ASP.NET] 除去日期格式中的 "上午"、"下午"

2017-01-18
2023-02-20 最後更新

Visual Studio 2015

在 SQL Server 中,如果欄位定義為 datetime,在 SQL Server Management Studio 中 SELECT 時候,顯示的是 24 小時制,不會有 上午、下午 出現。
但是在 ASP.NET 顯示該欄位值,會出現 上午、下午。

********************************************************************************
在 SQL 語法用 CONERT 轉換,只取得 年月日,這樣 ASP.NET 顯示時候只有 年月日。

SELECT  CONVERT(VARCHAR,[MyDateTime],111)   AS   MyDate

CAST 和 CONVERT (Transact-SQL) - SQL Server | Microsoft Docs

SELECT convert(varchar, getdate(), 111) - yyyy/mm/dd
SELECT convert(varchar, getdate(), 112) - yyyymmdd
SELECT convert(varchar, getdate(), 120) - yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar, getdate(), 121) - yyyy-mm-dd hh:mm:ss.mmm

SELECT replace(convert(varchar, getdate(), 111), -/-, - -) - yyyy mm dd
SELECT convert(varchar(7), getdate(), 126)                 - yyyy-mm
SELECT right(convert(varchar, getdate(), 106), 8)          - mon yyyy

********************************************************************************
若為 ASP.NET 字串,可直接 Replace

string myDate = myDateTimeString.Replace("上午", "").Replace("下午", "");

但是注意 "下午 01:00:00" 拿掉下午,會變成  "01:00:00",時間錯誤。
如果該字串值其實只儲存年月日,則時分秒一定是 "上午 12:00:00",可以這樣取代。 

********************************************************************************
若使用 Calendar 取日期,可以設定格式,取得的值不會有上午、下午。

        // 除去日期格式中的 "上午"、"下午"
        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            Calendar1.Visible = true;
        }
        protected void Calendar1_SelectionChanged(object sender, EventArgs e)
        {
            TextBox_CreateTime1.Text = Calendar1.SelectedDate.ToString("yyyy/MM/dd HH:mm:ss");
            Calendar1.Visible = false;
        }

********************************************************************************
您可以使用 DateTime.ParseExact 方法來將 12 小時制的字串值轉換為 24 小時制的日期時間值,然後使用 ToString 方法來輸出您需要的日期時間字串格式。以下是一個 C# 的範例代碼:

string myDate = "2/23/2023 10:30 AM"; // 12小時制的字串值

DateTime dt = DateTime.ParseExact(myDate, "M/d/yyyy h:mm tt", CultureInfo.InvariantCulture);
// 使用 ParseExact 方法將 12小時制的字串值轉換為 24小時制的日期時間值

string newDate = dt.ToString("yyyy-MM-dd HH:mm:ss");
// 使用 ToString 方法將日期時間值轉換為您需要的日期時間字串格式,這裡使用的是 24小時制的格式 "yyyy-MM-dd HH:mm:ss"

Console.WriteLine(newDate); // 輸出 "2023-02-23 10:30:00"

在上面的範例中,使用了 DateTime.ParseExact 方法來解析 myDate 字串值,指定了其格式為 "M/d/yyyy h:mm tt",其中 "tt" 表示上午/下午的標記,而 "h" 則表示 12小時制的小時值。然後,使用 ToString 方法將日期時間值轉換為您需要的日期時間字串格式,指定了其格式為 "yyyy-MM-dd HH:mm:ss",其中 "HH" 表示 24小時制的小時值。

請注意,DateTime.ParseExact 方法可能會拋出異常,例如如果 myDate 字串值無法解析為指定的格式時。因此,在實際使用中,您可能需要對這些異常進行處理。

********************************************************************************
(完)

沒有留言:

張貼留言