5

我在表格中有一个varchar(5)列,其中包含 24 小时格式时间的小时和分钟。我想将此 24 小时格式转换为 12 小时格式,最后将此 12 小时格式时间与日期值一起嵌入到 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   

日期不会是当前日期,它可以是任何日期值,例如 2012 年 8 月 8 日或 2012 年 7 月 8 日

4

4 回答 4

11

你可以这样做:

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);

参考资料:

于 2012-08-10T11:31:32.350 回答
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
于 2012-08-10T11:28:48.927 回答
0
string strDate = DateTime.ParseExact("8:18","HHmm",CultureInfo.CurrentCulture).ToString("hh:mm tt");
于 2012-08-10T11:28:59.363 回答
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)应该是字符串。

于 2019-07-16T13:34:05.473 回答