如何从DateTime获取AM / PM值?

时间:2011-10-24 11:58:37

标签: c# .net 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()
    + " "
    ????????????????
}

如何从dateTime值获取AM / PM?

16 个答案:

答案 0 :(得分:327)

怎么样:

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

答案 1 :(得分:96)

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

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

您还可以查看相关主题:

How do you get the current time of day?

答案 2 :(得分:40)

DateTime应始终位于“美国人”(格里高利历)日历的内部。所以,如果你这样做

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

你应该在更少的行中获得你想要的东西。

答案 3 :(得分:27)

使用字符串格式非常简单

on .ToSTring("") :

  • 如果你使用“hh” - >>小时,从01到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م

م表示晚上(مساء的第一个版本)。

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

你可以在windows区域和语言下的Windows控制面板上的不同格式之间切换 - >当前格式(组合框)和更改...应用它来重建(执行)您的应用程序,并观看我在谈论的内容。

  

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

只需添加两行即可: - >

第一步在代码顶部添加using System.Globalization;

并将Previous代码修改为:

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 =>使用默认的英文格式。

另一个问题我希望将pm设置为阿拉伯语或特定语言,即使我将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...

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

答案 4 :(得分:17)

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

我想让AM PM成为约会的一部分,所以我使用了Andy的建议:

dateTime.ToString("tt");

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

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

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

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

.. 当然你必须添加:using System.Globalization;在你的文件上 我希望这会有所帮助:)

答案 5 :(得分:7)

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

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

答案 6 :(得分:7)

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

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

答案 7 :(得分:7)

非常简单

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

答案 8 :(得分:4)

bool isPM = GetHour() > 11这样的东西。但是如果要将日期格式化为字符串,则不需要自己执行此操作。使用date formatting功能。

答案 9 :(得分:1)

你可以用这种方式测试

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

输出将如下:

AM

PM

答案 10 :(得分:1)

另一个选项是更改用于获得正确格式的默认区域性。优点是整个代码都将使用新格式。

CultureInfo.CurrentCulture = new CultureInfo("Fr-fr");
Console.WriteLine(DateTime.Now.ToString("t")); // 14:08

var customCulture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
customCulture.DateTimeFormat.AMDesignator = "am";
customCulture.DateTimeFormat.PMDesignator = "pm";
customCulture.DateTimeFormat.ShortTimePattern = "HH:mm tt";
CultureInfo.CurrentCulture = customCulture;

Console.WriteLine(DateTime.Now.ToString("t")); // 14:08 pm

答案 11 :(得分:0)

这是一种更简单的方法,您可以编写时间格式(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")

答案 12 :(得分:0)

@Andy的回答是好的。但是,如果您想不使用24小时格式显示时间,则可以按照以下方式进行操作

string dateTime = DateTime.Now.ToString("hh:mm:ss tt", CultureInfo.InvariantCulture);

在那之后,您应该获得类似于“ 10:35:20 PM”或“ 10:35:20 AM”的时间

答案 13 :(得分:0)

如果要向LongDateString Date添加时间,可以采用以下方式设置其格式:

    DateTime date = DateTime.Now;
    string formattedDate = date.ToLongDateString(); 
    string formattedTime = date.ToShortTimeString();
    Label1.Text = "New Formatted Date: " + formattedDate + " " + formattedTime;

输出:

New Formatted Date: Monday, January 1, 1900 8:53 PM 

答案 14 :(得分:-2)

以下是一些示例代码:

DateTime time = DateTime.Now;
string AM_PM;
AM_PM = time.ToLongTimeString().Substring(time.ToLongTimeString().Length - 2);

答案 15 :(得分:-2)

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