从包含24小时格式的时间的字符串转换为时间12小时格式

Fah*_*jua 3 c# sql sql-server

varchar(5)在表格中有一列,其中包含24小时格式时间的小时和分钟.我想将这个24小时格式转换为12小时格式,最后将这个12小时格式时间与Date值一起嵌入到DateTime变量中.以下是演示示例.

例如

8:18应该转换为8:18:00 AM,然后应该嵌入一个日期,如8/10/2012 8:18:50 AM,以便能够存储在DB的DateTime列中.

22:20......10:20:00 PM.......8/10/2012 10:20:00 PM   
Run Code Online (Sandbox Code Playgroud)

日期不是当前日期,可以是任何日期值,如8/8/2012或7/8/2012

Joã*_*elo 10

你可以这样做:

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);
Run Code Online (Sandbox Code Playgroud)

现在需要考虑的重要部分:

  • 解析使用的格式"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);
Run Code Online (Sandbox Code Playgroud)

参考资料: