我如何从一个日期时间得到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值中获得AM/PM ?

417486 次浏览

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

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

对于你的例子,但是有更好的方法格式化datetime。

DateTime应该总是在“美国”(格里高利历)的内部。所以如果你这样做

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

你可以少写几行就能得到你想要的东西。

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

这将为您提供时间的字符串值。Tt应该附加am/pm。

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

你怎么知道现在的时间?< / >

如何:

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

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

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

我知道这似乎有点晚了。然而,它可能会帮助一些人

我想要得到约会的上午下午部分,所以我使用了安迪的建议:

dateTime.ToString("tt");

我用那部分构造一个路径来保存我的文件.. 我建立了我的假设,我将得到AM或PM,没有其他!!< / p >

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

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

dateTime.ToString("tt", CultureInfo.InvariantCulture);
< p > . . 当然你必须加上:使用System.Globalization;在你的文件上面 我希望这将有助于某人:)

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

使用字符串格式非常简单

.ToString("") :

  • 如果你使用"hh"→祝辞时间,从01点到12点采用12小时制。

  • 如果你使用"HH"→祝辞时间,采用24小时制,从00点到23点。

  • 如果你添加"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 shows 11:12 PM
var res2 = d.ToString("HH:mm");   // this shows 23:12


Console.WriteLine(res);
Console.WriteLine(res2);


Console.Read();

等一下,这不是所有你需要关心的其他东西是系统文化,因为相同的代码在其他语言的窗口上执行 特别是对于不同文化的语言,相同的代码

会产生不同的结果

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

// 23:12 م

م的意思是傍晚(مساء的首字母)。

在另一个系统区域性(取决于Windows区域和语言选项的设置)中,它将显示// 23:12 du。

您可以在Windows控制面板的Windows区域和语言->当前格式(组合框)和更改…应用它做一个重建(执行)你的应用程序,看看我在说什么。

如果当前系统的文化没有设置为英语,我可以强迫谁显示Am和Pm单词在英语事件中?

只需添加两行即可:->

第一步在你的代码顶部添加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 =比;使用默认英文格式。

另一个问题,我想有下午是在阿拉伯语或特定的语言,即使我使用窗口设置为英语(或其他语言)区域格式?

阿拉伯语发音例句:

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...

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

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

您可以用这种方法进行测试

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

输出如下所示:

AM

PM

非常简单

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

@Andy的回答是ok。但如果你想显示时间而不是24小时格式,你可以这样做

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

之后,你应该得到“10:35:20 PM”或“10:35:20 AM”这样的时间

如果你想给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

另一种选择是更改用于获得正确格式的默认区域性。这样做的好处是,新格式将在整个代码中使用。

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