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

时间:2012-08-10 11:15:47

标签: 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一样能够存储在DateTime中   DB专栏。

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

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

4 个答案:

答案 0 :(得分: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);

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

  • 解析格式使用"H:m",因此假设24H值不使用零来为小时或分钟的单个数字前缀;
  • 打印格式使用"hh:mm:ss tt",因为它似乎是您想要的格式,但是您需要使用CultureInfo.InvariantCulture来确定您获得的AM / PM指示符实际上是AM或下午。如果您使用其他文化,AM / PM指示符可能会更改;
  • 完整的日期和时间是根据DateTime.Today构建的,它以零时间返回今天的日期,然后我们只添加我们从输入中读取的时间。

要从其他日期创建最终日期和时间,您可以改为使用:

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

参考资料:

答案 1 :(得分: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

答案 2 :(得分:0)

string strDate = DateTime.ParseExact("8:18","HHmm",CultureInfo.CurrentCulture).ToString("hh:mm tt");

答案 3 :(得分:0)

            string fromTime = Convert.ToStr(reader["TimeFrom"]);
            string toTime = Convert.ToStr(reader["TimeTo"]);
            item.Time=DateTime.Parse(fromTime,CultureInfo.CurrentCulture).ToString("hh:mm tt");

模型的属性(此处为item.Time)应为字符串。