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

本文关键字:时间 显示 格式 hh mm | 更新日期: 2023-09-27 18:27:46

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

using System.Globalization;
[...]
PersianCalendar pc = new PersianCalendar();
DateTime thistime = DateTime.Now;
string persiantimenow = pc.GetHour(thistime) + ":" + pc.GetMinute(thistime);
Console.WriteLine(persiantimenow);

现在是12:35AM,所以输出是: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");

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

理想情况下,您应该使用DateTimeFormatInfo,它的Calendar属性设置为PersianCalendar。然而,从文档来看:

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

这使得它很难在不篡改的情况下使用,基本上:(

不过,对于小时/分钟来说,日历真的重要吗?我很清楚,不同的日历对不同的日期的处理方式不同,但对时间是否不同?对于时间域,你能不能不使用不变的文化?

 time.Text = DateTime.Now.ToString("h:mm tt", CultureInfo.InvariantCulture);
        time.Text = time.Text.Replace("AM", "صبح");
        time.Text = time.Text.Replace("PM", "عصر");