有问题的代码如下:

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 ?


当前回答

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

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

输出如下所示:

AM

or

PM

其他回答

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

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

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

你如何得到当前的时间?

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

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

输出如下所示:

AM

or

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应该始终在“美国”(格里高利历)的内部。所以如果你这样做

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

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

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

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