2012-08-10 96 views
2

我有一個varchar(5)列中包含24小時格式時間的小時和分鐘。我想將這24小時格式轉換爲12小時格式,最後將這12小時格式時間與Date值一起嵌入到DateTime變量中。下面是一個演示的例子。轉換爲時間12小時格式從包含24小時格式時間的字符串

對於實施例

8:18應該被轉換爲上午08點十八分00秒,然後應被嵌入 與像2012年8月10日上午8時18分五十秒一個日期,以便能夠存儲在DB的DateTime 列中。

22:20......10:20:00 PM.......8/10/2012 10:20:00 PM 

的日期不會是當前的日期也可以是像8/8/2012或2012年7月8日的任何日期值

+0

我將從用戶輸入中檢索該時間值,將其轉換爲上述12小時格式,將其嵌入日期值並保存在標籤中並插入到數據庫中 – 2012-08-10 11:19:10

+2

'DateTime'值沒有關聯表示。那麼爲什麼你要轉換爲12h格式,之後不久轉換爲'DateTime'? – CodesInChaos 2012-08-10 11:34:29

+0

我想要做的是,我有一個字符串的日期,如字符串dt =「8/14/2012」,我有一個24小時格式,如「8:18」的字符串中的時間值....現在我想要的是,這兩個值應該結合使日期時間值像最終日期時間將是 (2012年8月14日8時18分00秒) – 2012-08-11 04:18:10

回答

9

你可以做這樣的事情:

string input = "22:45"; 

var timeFromInput = DateTime.ParseExact(input, "H:m", null, DateTimeStyles.None); 

string timeIn12HourFormatForDisplay = timeFromInput.ToString(
    "hh:mm:ss tt", 
    CultureInfo.InvariantCulture); 

var timeInTodayDate = DateTime.Today.Add(timeFromInput.TimeOfDay); 

現在要考慮的重要部分:

  • 解析的格式使用"H:m",因此它假定24H值不使用零作爲單位數小時或分鐘的前綴;
  • 打印格式使用"hh:mm:ss tt",因爲它似乎是您想要的格式,但是您需要使用CultureInfo.InvariantCulture來確保您獲得實際上是AM或PM的AM/PM指示符。如果您使用其他文化,AM/PM指示符可能會更改;
  • 完整的日期和時間是基於DateTime.Today構建的,它返回當天的零點時間,然後我們只添加從輸入讀取的時間。

若要從另一個日期的最後日期和時間,您可以改用:

var timeInAnotherDate = new DateTime(2000, 1, 1).Add(timeFromInput.TimeOfDay); 

參考資料:

+0

嘿@JoãoAngelo創建最終日期時間 var timeInAnotherDate = new DateTime(2000,1,1).Add(timeFromInput.TimeOfDay); 您手動通過創建日期時間的日期。如果我想這樣做,那麼應該總是從一個字符串輸入。而不是手動輸入的參數。非常感謝您的幫助 – 2012-08-11 03:52:33

+0

使用帶日期格式的'DateTime.ParseExact',例如'「M/d/yyyy」'。 – 2012-08-11 09:32:50

1
create function dbo.COMBINE_DATE_TIME(
    @DatePart DateTime,     -- DateTime 
    @TimePart varchar(5))    -- Time 
    returns DateTime 
as begin 
    return DATEADD(day, DATEDIFF(day,0,@DatePart), 
    CONVERT(DateTime,ISNULL(@TimePart,''),14)) 
end 
go 
0
string strDate = DateTime.ParseExact("8:18","HHmm",CultureInfo.CurrentCulture).ToString("hh:mm tt"); 
+0

我認爲格式是「HH:mm」,但它wouldn在這種情況下工作,原因字符串必須是「08:18」 – Chepene 2012-08-10 11:34:34

相關問題