以hh:mm格式显示波斯时间

时间:2012-03-12 22:43:27

标签: c# datetime calendar globalization datetime-format

我在我的应用程序上使用波斯日历,我正在使用该代码:

using System.Globalization;

[...]

PersianCalendar pc = new PersianCalendar();
DateTime thistime = DateTime.Now;
string persiantimenow = pc.GetHour(thistime) + ":" + pc.GetMinute(thistime);

Console.WriteLine(persiantimenow);

现在是12:35 AM,所以输出为:0:33,但我希望它是00:33

我尝试使用:

string persiantimenow = pc.GetHour(thistime.ToString("hh")) + ":" + pc.GetMinute(thistime.ToString("mm"));

它给了我错误所以我使用了下一个,但也给出了同样的错误

string thistime_Hour = thistime.ToString("HH");
string thistime_minute = thistime.ToString("MM");

string persiantimenow = pc.GetHour(thistime_Hour) + ":" + pc.GetMinut(thistime_minute);

但我得到错误:

Argument 1: cannot convert from 'string' to 'System.DateTime'

编辑1 [我想出了一个棘手的解决方案]

if (pc.GetHour(thistime) < 12)
{
     string persiantimenow = "0" + pc.GetHour(thistime) + ":" + pc.GetMinute(thistime);
     Console.WriteLine(persiantimenow);
}

这不是我需要的,但它解决了这个问题。

编辑2 [L.B为我解决了] 这是解决方案:

string persiantimenow = pc.GetHour(thistime).ToString("00") + ":" + pc.GetMinute(thistime).ToString("00");

2 个答案:

答案 0 :(得分:1)

理想情况下,您使用的DateTimeFormatInfo Calendar属性设置为PersianCalendar。但是,来自docs

  

您的应用程序不应将PersianCalendar对象用作文化的默认日历。默认日历由CultureInfo.Calendar属性指定,并且必须是CultureInfo.OptionalCalendars属性返回的日历之一。目前,PersianCalendar类不是CultureInfo类支持的任何文化的可选日历,因此不能是默认日历。

这使得它很难在没有捏造的情况下使用,基本上是:(

虽然小时/分钟,日历真的重要吗?我非常清楚不同的日历会以不同的方式处理不同的日期,但他们会以不同的方式处理吗?你能不能只使用不变的文化,时间领域?

答案 1 :(得分:0)

 time.Text = DateTime.Now.ToString("h:mm tt", CultureInfo.InvariantCulture);

        time.Text = time.Text.Replace("AM", "صبح");
        time.Text = time.Text.Replace("PM", "عصر");