如何从DateTime获取AM / PM值?

有问题的代码如下:

public static string ChangePersianDate(DateTime dateTime) { System.Globalization.GregorianCalendar PC = new System.Globalization.GregorianCalendar(); PC.CalendarType = System.Globalization.GregorianCalendarTypes.USEnglish; return PC.GetYear(dateTime).ToString() + "/" + PC.GetMonth(dateTime).ToString() + "/" + PC.GetDayOfMonth(dateTime).ToString() + "" + PC.GetHour(dateTime).ToString() + ":" + PC.GetMinute(dateTime).ToString() + ":" + PC.GetSecond(dateTime).ToString() + " " ???????????????? } 

我怎样才能从dateTime值获得上午/下午?

怎么样:

 dateTime.ToString("tt", CultureInfo.InvariantCulture); 
 string.Format("{0:hh:mm:ss tt}", DateTime.Now) 

这应该给你时间的string值。 应该追加am / pm。

你也可以看看相关的主题:

你如何得到当前的时间?

DateTime应始终在“美国”(公历)日历内部。 所以,如果你这样做

 var str = dateTime.ToString(@"yyyy/MM/dd hh:mm:ss tt", new CultureInfo("en-US")); 

你应该得到你想要的更less的行数。

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

使用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(执行)你的应用程序,看我什么在说什么。

那么如果当前系统的文化不是英文的,那么谁能强制在英语事件中显示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 Arabic ar-BH ar-BH Arabic (Bahrain) ar-DZ ar-DZ Arabic (Algeria) ar-EG ar-EG Arabic (Egypt) big list... 

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

我知道这似乎是非常晚了,但它可能会帮助那里的人

我想获得AM PM的一部分,所以我使用了Andy的build议:

 dateTime.ToString("tt"); 

我用这部分来构build一个path来保存我的文件..我build立了我的假设,我会得到上午或下午,没有别的!

然而,当我使用的电脑,其文化不是英语..(在我的情况下,阿拉伯语)..我的应用程序失败,因为格式“tt”返回的东西不是AM也不是PM(م或ص)。

所以解决这个问题就是通过添加第二个参数来忽略文化:

 dateTime.ToString("tt", CultureInfo.InvariantCulture); 

..当然你必须补充:使用System.Globalization; 在你的文件的顶部,我希望能帮助别人:)

 + PC.GetHour(datetime) > 11 ? "pm" : "am" 

对于你的例子,但有更好的方式来设置date时间格式。

来自: http : //www.csharp-examples.net/string-format-datetime/

 string.Format("{0:t tt}", datetime); // -> "P PM" or "A AM" 

bool isPM = GetHour() > 11东西是bool isPM = GetHour() > 11 。 但是如果你想把一个date格式化成一个string,你不需要自己去做。 使用date格式化function。

你可以用这种方式来testing它

 Console.WriteLine(DateTime.Now.ToString("tt ")); 

输出将如下所示:

 AM 

要么

 PM 

这是一个更简单的方法,你可以写时间格式(hh:mm:ss tt)并根据需要单独显示。

 string time = DateTime.Now.Hour.ToString("00") + ":" + DateTime.Now.Minute.ToString("00") + ":" + DateTime.Now.Second.ToString("00") + DateTime.Now.ToString(" tt"); 

或者只是简单地:

  DateTime.Now.ToString("hh:mm:ss tt") 

以下是一些示例代码:

 DateTime time = DateTime.Now; string AM_PM; AM_PM = time.ToLongTimeString().Substring(time.ToLongTimeString().Length - 2); 
 string AM_PM = string.Format("{0:hh:mm:ss tt}", DateTime.Now).Split(new char[]{' '})[1];