如何将 24 小时格式的时间跨度转换为 12 小时格式的时间跨度

本文关键字:时间跨度 小时 格式 转换 | 更新日期: 2023-09-27 18:30:57

我有 TimeSpan 数据表示为 24 小时格式,例如 14:00:00,我想将其转换为 12 小时格式,下午 2:00,我用谷歌搜索并在堆栈溢出和 msdn 中找到了一些相关的东西,但没有解决这个问题,有人可以帮助我吗?提前谢谢。

更新似乎可以将 24 小时格式的 TimeSpan 转换为字符串,但无法将字符串转换为 12 小时格式的 TimeSpan :(

但我仍然得到了很多很好的答案,谢谢!

如何将 24 小时格式的时间跨度转换为 12 小时格式的时间跨度

(在一个

答案中总结我分散的评论。

首先,您需要了解TimeSpan表示时间间隔。此时间间隔在内部表示为刻度计数,而不是字符串14:00:00或字符串2:00 PM。只有当您将TimeSpan转换为字符串时,才有意义地谈论两种不同的字符串表示形式。从一种表示切换到另一种表示形式不会更改或转换存储在TimeSpan中的刻度计数。

将时间写入2:00 PM而不是14:00:00是关于日期/时间格式和区域性的。这一切都由DateTime类处理。

然而,即使TimeSpan表示时间间隔,它也非常适合表示一天中的时间(DateTime.TimeOfDay返回一个TimeSpan)。因此,将其用于此目的并非不合理。

要执行所描述的格式化,您需要依赖DateTime的格式化逻辑,或者只需创建自己的格式化代码。

  • 使用DateTime

    var dateTime = new DateTime(timeSpan.Ticks); // Date part is 01-01-0001
    var formattedTime = dateTime.ToString("h:mm tt", CultureInfo.InvariantCulture);
    

    ToString 中使用的格式说明符记录在 MSDN 上的"自定义日期和时间格式字符串"页上。指定使用所需 AM/PM 指示符的CultureInfo非常重要。否则,tt格式说明符可能会替换为空字符串。

  • 使用自定义格式:

    var hours = timeSpan.Hours;
    var minutes = timeSpan.Minutes;
    var amPmDesignator = "AM";
    if (hours == 0)
      hours = 12;
    else if (hours == 12)
      amPmDesignator = "PM";
    else if (hours > 12) {
      hours -= 12;
      amPmDesignator = "PM";
    }
    var formattedTime =
      String.Format("{0}:{1:00} {2}", hours, minutes, amPmDesignator);
    

    诚然,此解决方案比第一种方法复杂得多。

TimeSpan表示时间间隔而不是一天中的时间。DateTime结构更有可能是您要查找的。

您需要先将 TimeSpan 转换为 DateTime 对象,然后使用所需的任何 DateTime 格式:

var t = DateTime.Now.TimeOfDay;
Console.WriteLine(new DateTime(t.Ticks).ToString("hh:mm:ss tt"));

ToShortTimeString()也可以工作,但它取决于区域设置,因此它不会在非美国系统上正确显示(或正确显示,具体取决于您如何看到它)。

TimeSpan表示时间间隔(时间之间的差异),不是日期或时间,因此以 24 或 12h 格式定义它毫无意义。我假设你真的想要一个DateTime.

例如今天的下午 2 点:

TimeSpan ts = TimeSpan.FromHours(14);
DateTime dt = DateTime.Today.Add(ts);

然后,您可以根据需要设置该日期的格式:

String formatted = String.Format("{0:d/M/yyyy hh:mm:ss}", dt); // "12.4.1012 02:00:00" - german (de-DE)

http://msdn.microsoft.com/en-us/library/az4se3k1%28v=vs.100%29.aspx

试试这段代码:

int timezone = 0;

此字符串提供 12 小时格式

string time = DateTime.Now.AddHours(-timezone).ToString("hh:mm:ss tt");

此字符串提供 24 小时格式

string time = DateTime.Now.AddHours(-timezone).ToString("HH:mm:ss tt");

假设您停留在 24 小时内,您可以通过从今天的DateTime(或任何与此相关的日期)中减去负TimeSpan来实现您想要的,然后去除日期部分:

DateTime dt = DateTime.Today;
dt.Subtract(-TimeSpan.FromHours(14)).ToShortTimeString();

收益 率:

下午2:00

String formatted = yourDateTimeValue.ToString("hh:mm:ss tt");

这很简单,假设我们有一个 TimesSpan 的对象 tsTimeSpan ts = new TimeSpan();假设它包含一些值,例如 14:00:00现在首先将其转换为字符串,然后在日期时间中如下:

TimeSpan ts = new TimeSpan(); // this is object of TimeSpan and Suppose it contains
                              // value 14:00:00
string tIme = ts.ToString(); // here we convert ts into String and Store in Temprary
                             // String variable.
 DateTime TheTime = new DateTime(); // Creating the object of DateTime;
 TheTime = Convert.ToDateTime(tIme); // now converting our temporary string into DateTime;
 Console.WriteLine(TheTime.ToString(hh:mm:ss tt));

这将结果显示为: 02:00:00 下午

正常日期时间可以转换为 24 或 12 小时格式。

对于 24 小时格式 - MM/dd/yyyy HH:mm:ss tt

对于 12 小时格式 - MM/dd/yyyy hh:mm:ss tt

有资本和小H的区别。

dateTimeValue.ToString(format, CultureInfo.InvariantCulture);