2011-07-17 106 views
7

我用UTC時間存儲用戶時間,當我顯示它時,我需要將它轉換爲下午時間。如何將時間範圍轉換爲下午或上午時間?

這裏是例如在數據庫中,我已經17:00:00轉換至下午5:00

這裏是我想出了到目前爲止的代碼,但它不工作

var time = DateTime.ParseExact(object.Time.ToString(), "HHmm", CultureInfo.CurrentCulture).ToString("hh:mm tt"); 
+0

你有時間或UTC時間嗎?這並不合適。什麼是「ToString」並再次解析業務? – CodesInChaos

回答

11
var time = DateTime.ParseExact("17:00", "HH:mm", null).ToString("hh:mm tt"); 

回報05:00 PM

DateTime.ParseExact將返回日期時間

編輯:

包含的CultureInfo

var time = DateTime.ParseExact("17:00", "HH:mm", null).ToString("hh:mm tt", CultureInfo.GetCultureInfo("en-US")); 
+1

它取決於'CultureInfo.CurrentCulture'。檢查:var time = DateTime.ParseExact(「17:00」,「HH:mm」,null).ToString(「hh:mm tt」,CultureInfo.GetCultureInfo(「es-ES」));'。 –

+0

我的意思是,對於文化ES ES它不會顯示AM/PM ...:-) –

+0

@KirillPolishchuk:用這個擴展方法更新可能很好:public static string ToAMPM(this TimeSpan timespan) {DateTime dt = DateTime.ParseExact(「17:00」,「HH:mm」,null) ; var timeString = dt.ToString(「hh:mm tt」,System.Globalization.CultureInfo.GetCultureInfo(「en-US」)); return timeString; } – Lee

6

時間跨度是持續時間「17小時」,而不是時間。也許將此添加到日期(僅)並使用現有的日期時間格式選項? (雖然手錶夏令)

string s = DateTime.Today.Add(duration).ToString(specifier); 
2

不要忘記指定適當的文化,例如:CultureInfo.InvariantCulture

var time = DateTime.Now.ToString("h:mm tt", CultureInfo.InvariantCulture); 

參見:Custom Date and Time Format Strings

2

基於您的評論,首先轉換TimeSpanDateTime

var dtUtc = DateTime.Now.ToUniversalTime(); 
dtUtc.AddHours(timeSpanObject.Hours); 
dtUtc.AddMinutes(timeSpanObject.Minutes); 

一旦它的一個DateTime,你可以從UTC將其轉換爲本地時間:

var dtLocal = dtUtc.ToLocalTime(); 

只有w母雞你顯示它,你會包括AM/PM,如:

dtLocal.ToString("h:mm tt"); 
+0

var time = Convert.ToDateTime(object.Time).ToLocalTime();無法投射「System.TimeSpan」類型的對象來鍵入「System.IConvertible」。 object.Time是一個時間跨度 –

+0

@Andrew Venture:發佈編輯。我很想知道如何從數據庫中檢索一個'TimeSpan'對象;這很不尋常! – Andomar

+0

@Andomar - SqlServer 2008 Express支持TimeSpan。 ;) – Luc

0

我只需要用我的TimeSpan顯示靜態HTML。所以在我看來,我用過,

DateTime.Today.Add(StartTime).ToString("%h:mm tt") 

「StartTime」是我的TimeSpan,它將其轉換爲DateTime並顯示它。現在我的時間顯示爲「3:00 PM」而不是「15:00」。 「%h」消除了1-9之間的前導零。

相關問題