将时间跨度值转换为使用C#格式“hh:mm Am / Pm”

我有一个存储在System.TimeSpantypes的variables中的值,如下所示。

 System.TimeSpan storedTime = 03:00:00; 

我可以将它重新存储在另一个Stringtypes的variables中,如下所示:

 String displayValue = "03:00 AM"; 

如果storedTimevariables的值是

 storedTime = 16:00:00; 

那么它应该被转换为:

 String displayValue = "04:00 PM"; 

您可以通过将时间跨度添加到date来做到这一点。

 TimeSpan timespan = new TimeSpan(03,00,00); DateTime time = DateTime.Today.Add(timespan); string displayTime = time.ToString("hh:mm tt"); // It will give "03:00 AM" 

بسماللهالرحمانالرحيم

使用string格式非常简单

on .ToSTring("") :

  • 如果你使用“hh” – >>这个小时,使用从12到12的12小时制。

  • 如果你使用“HH” – >>这个小时,使用从00到23的24小时制。

  • 如果添加“tt” – >> Am / Pm标志符。

例如从23:12转换为11:12 Pm:

  DateTime d = new DateTime(1, 1, 1, 23, 12, 0); var res = d.ToString("hh:mm tt"); // this show 11:12 Pm var res2 = d.ToString("HH:mm"); // this show 23:12 Console.WriteLine(res); Console.WriteLine(res2); Console.Read(); 

等待一秒钟不是所有你需要关心的东西是系统文化,因为相同的代码执行窗口与其他语言尤其是不同的文化语言会产生不同的结果与相同的代码

设置为阿拉伯语言文化的窗口的例子将显示如下:

// 23:12

means表示晚上(第一次是مساء)。

在另一个系统文化取决于在Windows区域和语言选项设置什么,它会显示// 23:12杜。

你可以在窗口控制面板上的窗口区域和语言 – >当前格式(combobox)之间的不同格式之间进行更改,并更改…应用它重build(执行)你的应用程序,并观看什么IAM谈论。

那么如果现行制度的文化不是英语的话,谁能强制在英语事件中显示Am和Pm词呢?

只需添加两行即可: – >

第一步using System.Globalization;添加using System.Globalization; 在你的代码之上

并修改以前的代码是这样的:

  DateTime d = new DateTime(1, 1, 1, 23, 12, 0); var res = d.ToString("HH:mm tt", CultureInfo.InvariantCulture); // this show 11:12 Pm 

InvariantCulture =>使用默认英文格式。

另外一个问题,即使我使用Windows设置为英文(或其他语言)区域格式,我希望下午使用阿拉伯语或特定语言。

阿拉伯语的例证:

  DateTime d = new DateTime(1, 1, 1, 23, 12, 0); var res = d.ToString("HH:mm tt", CultureInfo.CreateSpecificCulture("ar-AE")); 

这将显示// 23:12

事件如果我的系统设置为英文区域格式。 如果你想要另一种语言格式,你可以改变“ar-AE”。 有一个每种语言及其格式的列表。

例如:ar ar-SA阿拉伯语ar-BH ar-BH阿拉伯语(巴林)ar-DZ ar-DZ阿拉伯语(阿尔及利亚)ar-EG ar-EG阿拉伯语(埃及)

让我知道你有另一个问题。

您可以将TimeSpan添加到DateTime ,例如:

 TimeSpan span = TimeSpan.FromHours(16); DateTime time = DateTime.Today + span; String result = time.ToString("hh:mm tt"); 

演示: http : //ideone.com/veJ6tT

 04:00 PM 

标准date和时间格式string

做一些捎带现有的答案在这里:

 public static string ToShortTimeSafe(this TimeSpan timeSpan) { return new DateTime().Add(timeSpan).ToShortTimeString(); } public static string ToShortTimeSafe(this TimeSpan? timeSpan) { return timeSpan == null ? string.Empty : timeSpan.Value.ToShortTimeSafe(); } 
 string displayValue="03:00 AM"; 

这是一个时间点 ,而不是持续时间 (TimeSpan)。

所以你的基本devise或假设有些问题。

如果你想使用它,你必须首先将它转换为DateTime(时间点)。 您可以格式化date时间而不包含date部分,这将是您想要的string。

 TimeSpan t1 = ...; DateTime d1 = DateTime.Today + t1; // any date will do string result = d1.ToString("hh:mm:ss tt"); 

storeTimevariables可以具有类似的值
storeTime=16:00:00;

不,它可以具有4点的值,但是表示是二元的,TimeSpan不能logging4 pm 16:004 pm之间的差异。

您将需要从TimeSpan获取DateTime对象,然后可以轻松进行格式化。

一个可能的解决scheme是将时间跨度添加到零时间值的任何date。

 var timespan = new TimeSpan(3, 0, 0); var output = new DateTime().Add(timespan).ToString("hh:mm tt"); 

输出值将是"03:00 AM" (对于英语区域设置)。

将时间段parsing为DateTime,然后使用Format(“hh:mm:tt”)。 例如。

 TimeSpan ts = new TimeSpan(16, 00, 00); DateTime dtTemp = DateTime.ParseExact(ts.ToString(), "HH:mm:ss", CultureInfo.InvariantCulture); string str = dtTemp.ToString("hh:mm tt"); 

str将是:

 str = "04:00 PM" 

首先,您需要将时间跨度转换为DateTime结构:

 var dt = new DateTime(2000, 12, 1, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds) 

然后,您需要将该值转换为短时间格式的string

 var result = dt.ToString("t"); // Convert to string using Short Time format 
 Parse timespan to DateTime. For Example. //The time will be "8.30 AM" or "10.00 PM" or any time like this format. public TimeSpan GetTimeSpanValue(string displayValue) { DateTime dateTime = DateTime.Now; if (displayValue.StartsWith("10") || displayValue.StartsWith("11") || displayValue.StartsWith("12")) dateTime = DateTime.ParseExact(displayValue, "hh:mm tt", CultureInfo.InvariantCulture); else dateTime = DateTime.ParseExact(displayValue, "h:mm tt", CultureInfo.InvariantCulture); return dateTime.TimeOfDay; } 

你可以试试这个:

  string timeexample= string.Format("{0:hh:mm:ss tt}", DateTime.Now); 

您可以根据您的需要删除hh或mm或ss或tt,其中hh是在12小时的时间内是小时,mm是分钟,ss是秒,tt是上午/下午。

您不能将AM / PM添加到TimeSpan 。 如果要以12小时制格式显示时间,则无论如何都必须将TimaSpan值与DateTime相关联。

TimeSpan不打算使用12小时的时钟格式,因为我们正在这里讨论一个时间间隔

正如它在文件中所说的那样;

TimeSpan对象表示一个时间间隔 (持续时间或经过时间),测量时间为正数或负数天,小时,分钟,秒和小数秒。 TimeSpan结构也可以用来表示一天中的时间,但是只有当时间与特定date无关时。 否则,应该使用DateTimeDateTimeOffset结构。

另外Microsoft Docs描述如下:

TimeSpan值可以表示为[-]d.hh:mm:ss.ff ,其中可选的减号表示负的时间间隔, d分量是天, hh24小时制测量的小时数mm是分钟, ss是秒,而ff是秒的分数。

所以在这种情况下,您可以按如下方式使用AM / PM进行显示。

 TimeSpan storedTime = new TimeSpan(03,00,00); string displayValue = new DateTime().Add(storedTime).ToString("hh:mm tt"); 

附注
还应该注意DateTime的TimeOfDay属性是一个TimeSpan ,它代表的地方

一个时间间隔 ,表示自午夜以来经过的那一天的一小部分。