如何从DateTime获取AM/PM值?

Sil*_*ght 187 .net c# datetime datetime-format gregorian-calendar

有问题的代码如下:

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()
    + " "
    ????????????????
}
Run Code Online (Sandbox Code Playgroud)

如何从dateTime价值中获取AM/PM ?

And*_*ndy 342

怎么样:

dateTime.ToString("tt", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

  • `ToString("tt",System.Globalization.CultureInfo.InvariantCulture)` (7认同)
  • 您需要添加新的System.Globalization.CultureInfo("en-US")才能实现此目的(如果您尚未在美国上下文中运行该线程) (3认同)
  • @托马斯-好点。现在编辑以指定“CultureInfo.InvariantCulture” (2认同)
  • @AjaySharma只需在格式评估前添加12小时.`DateTime.Now.AddHours(12).ToString("tt",CultureInfo.InvariantCulture)` (2认同)

Xik*_*yoX 101

string.Format("{0:hh:mm:ss tt}", DateTime.Now)
Run Code Online (Sandbox Code Playgroud)

这应该给你时间的字符串值.tt应该附加上午/下午.

您还可以查看相关主题:

你怎么得到当前的时间?

  • 这应该是小写的`hh`,因为你当前的表示在24小时时间输出am和pm这有点无意义 (8认同)

xan*_*tos 44

DateTime应始终内部在"美国"日历(Gregorian).所以,如果你这样做

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

你应该在更少的线上得到你想要的东西.


Bil*_*lal 29

使用字符串格式非常简单

.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();
Run Code Online (Sandbox Code Playgroud)

等待一秒不是你需要关心的其他东西就是系统文化,因为在窗口上执行相同的代码与其他语言特别是不同的文化语言将使用相同的代码产生不同的结果

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

// 23:12م

م表示晚上(مساء的第一个).

在另一个系统文化取决于windows区域和语言选项上设置的内容,它将显示// 23:12 du.

你可以在windows区域和语言 - >当前格式(组合框)下更改窗口控制面板上的不同格式,并更改...应用它做你的应用程序的重建(执行),看看我在说什么.

那么如果当前系统的文化没有设置为英语,我可以强制在英语中显示Am和Pm Words吗?

只需添加两行即可: - >

第一步添加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
Run Code Online (Sandbox Code Playgroud)

InvariantCulture =>使用默认的英文格式.

另一个问题我想让pm用阿拉伯语或特定语言,即使我使用Windows设置为英语(或其他语言)区域格式?

阿拉伯语的例子:

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

这将显示// 23:12م

如果我的系统设置为英语区域格式,则为event.如果你想要另一种语言格式,你可以改变"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...
Run Code Online (Sandbox Code Playgroud)

如果您有其他问题,请告诉我.


小智 18

我知道这可能会非常晚......但它可能会帮助那些人

我想把AM PM作为约会的一部分,所以我用Andy建议的:

dateTime.ToString("tt");
Run Code Online (Sandbox Code Playgroud)

我用那个部分来构建一个保存我的文件的路径.我建立了我的假设,我会得到AM或PM而没有别的!

然而,当我使用PC时,它的文化不是英语..(在我的情况下是阿拉伯语)..我的应用程序失败,因为格式"tt"返回了一些新的非AM或PM(م或ص)..

所以解决这个问题的方法是通过添加第二个参数来忽略文化,如下所示:

dateTime.ToString("tt", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

..当然你必须添加:使用System.Globalization; 在你的文件顶部,我希望这将有助于某人:)

  • 感谢您添加此功能,因为它今天帮助了我 - 我在开发环境中使用AM,在远程服务器上使用AM,直到我阅读此帖后,谷歌才提供了大量帮助.甚至Dotnetpearls也说"tt的输出中没有句号.如果你需要在AM或PM中使用句号,你就必须操纵字符串." 在我的情况下,这当然是完全不真实的...... (3认同)

Jam*_*sco 11

非常简单

  Date someDate = new DateTime();
  string timeOfDay = someDate.ToString("hh:mm tt"); 
  // hh - shows hour and mm - shows minute - tt - shows AM or PM
Run Code Online (Sandbox Code Playgroud)


Kev*_*tch 9

+ PC.GetHour(datetime) > 11 ? "pm" : "am"
Run Code Online (Sandbox Code Playgroud)

对于您的示例,但有更好的方法来格式化日期时间.

  • 尽管看起来很丑陋,但是它比混搭不同文化更简单,更一致。例如,许多区域性显示的时间都是24小时,根本不包括AM / PM,而ToString(“ tt”)会生成一个空字符串。 (2认同)

Bap*_*net 8

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

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


Cod*_*aos 5

就像是bool isPM = GetHour() > 11。但如果您想将日期格式化为字符串,则不需要自己执行此操作。为此,请使用日期格式化函数。