我有時間跨度的數據,例如14:00:00,我想將其轉換爲12小時格式,2:00 PM,我用Google搜索,發現在計算器和MSDN相關的東西,但沒」解決這個問題,任何人都可以幫助我嗎?提前致謝。如何將24小時格式TimeSpan轉換爲12小時格式TimeSpan?表示爲24小時格式
更新 看來,它可能24小時制時間跨度轉換爲字符串,但不可能將字符串轉換爲12小時制時間跨度:(
但我仍然有這麼多好的答案,謝謝!
我有時間跨度的數據,例如14:00:00,我想將其轉換爲12小時格式,2:00 PM,我用Google搜索,發現在計算器和MSDN相關的東西,但沒」解決這個問題,任何人都可以幫助我嗎?提前致謝。如何將24小時格式TimeSpan轉換爲12小時格式TimeSpan?表示爲24小時格式
更新 看來,它可能24小時制時間跨度轉換爲字符串,但不可能將字符串轉換爲12小時制時間跨度:(
但我仍然有這麼多好的答案,謝謝!
實際上'TimeSpan'非常適合代表一天中的某個時間,只要您確定TotalDays <1'即可。運算符重載允許您輕鬆地計算特定日期事件的'DateTime'和給定'TimeSpan'代表一天中的時間。此外'DateTime.TimeOfDay'將返回一個'TimeSpan'。 – 2012-04-12 13:58:46
許多好的觀點,雖然需要稍微改變時間表示的思維方式。令人困惑的是,認爲'DateTime'類型返回代表一天中的某個時間可能具有實際跨越_multiple days_的值(儘管在邏輯上從不會)。 – 2012-04-12 14:04:48
假設你是ST在24小時的範圍內阿英,你可以達到你想要的東西通過從今天的DateTime
負TimeSpan
(或與此有關的任何日期),然後剝去日期部分:
DateTime dt = DateTime.Today;
dt.Subtract(-TimeSpan.FromHours(14)).ToShortTimeString();
產量:
2 :00 PM
TimeSpan
代表一個時間間隔(時間差), 不是日期或時間,所以用24或12h格式定義它是沒有意義的。我假設你真的想要一個DateTime
。
例如今天下午2點的:
TimeSpan ts = TimeSpan.FromHours(14);
DateTime dt = DateTime.Today.Add(ts);
然後你就可以格式化日期,只要你想:
String formatted = String.Format("{0:d/M/yyyy hh:mm:ss}", dt); // "12.4.1012 02:00:00" - german (de-DE)
http://msdn.microsoft.com/en-us/library/az4se3k1%28v=vs.100%29.aspx
您需要將時間跨度轉換爲DateTime對象第一,然後使用任何你需要的DateTime format:
var t = DateTime.Now.TimeOfDay;
Console.WriteLine(new DateTime(t.Ticks).ToString("hh:mm:ss tt"));
ToShortTimeString()
也將工作,但這樣就不會正確顯示(或正確的,這取決於你怎麼看它)在非美國系統是區域的設置有關。
您需要在ToString調用中指定'CultureInfo.InvariantCulture'類似'CultureInfo.InvariantCulture'來避免當前文化使用24小時時間格式(在這種情況下,格式說明符'tt'插入空字符串)時出現問題。 – 2012-04-12 14:06:36
String formatted = yourDateTimeValue.ToString("hh:mm:ss tt");
試試這個代碼:
int timezone = 0;
此字符串給出的12小時格式
string time = DateTime.Now.AddHours(-timezone).ToString("hh:mm:ss tt");
此字符串給出24小時格式
string time = DateTime.Now.AddHours(-timezone).ToString("HH:mm:ss tt");
(加我在單個答案中分散評論。)
首先你要明白,TimeSpan
代表的時間間隔。該時間間隔被內部表示爲蜱一個不是字符串14:00:00
也不字符串2:00 PM
的計數。只有當您將TimeSpan
轉換爲字符串時,纔有意義討論兩個不同的字符串表示形式。從一種表示切換到另一種表示不會更改或轉換TimeSpan
中存儲的滴答計數。
寫作時間爲2:00 PM
而不是14:00:00
是關於日期/時間格式和文化。這一切都由DateTime
類處理。
但是,即使TimeSpan
表示一個時間間隔,它非常適合於表示一天中的時間(DateTime.TimeOfDay
返回TimeSpan
)。因此,爲此目的使用它並非不合理。
要執行所描述的格式化,您需要依靠DateTime
的格式化邏輯或簡單地創建自己的格式代碼。
使用DateTime
:
var dateTime = new DateTime(timeSpan.Ticks); // Date part is 01-01-0001
var formattedTime = dateTime.ToString("h:mm tt", CultureInfo.InvariantCulture);
使用ToString
的格式說明記錄了Custom Date and Time Format Strings頁面上MSDN上。指定使用所需AM/PM指示符的CultureInfo
非常重要。否則,tt
格式說明符可能會被空字符串替換。
使用自定義格式:
var hours = timeSpan.Hours;
var minutes = timeSpan.Minutes;
var amPmDesignator = "AM";
if (hours == 0)
hours = 12;
else if (hours == 12)
amPmDesignator = "PM";
else if (hours > 12) {
hours -= 12;
amPmDesignator = "PM";
}
var formattedTime =
String.Format("{0}:{1:00} {2}", hours, minutes, amPmDesignator);
誠然,這種解決方案比第一種方法更復雜了不少。
哇...如此詳細的答案,2解決方案,並在MSDN上自定義格式教程...非常感謝! – user1108069 2012-04-12 15:17:05
這個解決方案幫助了我最好的。我的格式化時間變量如下所示: 'var formattedTime = String.Format(「{0} {1}」,hours,amPmDesignator);' – 2017-02-08 16:59:45
你能否提供你的代碼..瞭解你的問題.. – vikrantx 2012-04-12 12:21:26
它不是很清楚你能否詳細說明一下。 Timespan不是絕對的時間,所以你不能在AM/PM中表示它。所以14:00:00並不是Timespan,它只是以這種格式存儲在字符串變量中的時間? – 2012-04-12 12:22:59
這[鏈接](http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx)將幫助 – vikrantx 2012-04-12 12:26:26