这是我的代码:
DateTime Now = DateTime.Parse(DateTime.Now.ToString(), new System.Globalization.CultureInfo("fa-ir"));
Geogorian日期是:2016年6月16日
波斯日期是:13/03/1395
而现在的价值是:07/09/2025
时间是对的。 可能是什么问题?
答案 0 :(得分:5)
您只将cultureinfo参数传递给Parse,但不传递给ToString。这意味着使用线程文化格式化字符串,然后使用fa-ir culture进行解析。
答案 1 :(得分:1)
如果您想在波斯日历中获取“现在”的年,月和日,则应使用Calendar
类:
using System;
using System.Globalization;
public class Test
{
static void Main()
{
var now = DateTime.Now;
var calendar = new PersianCalendar();
Console.WriteLine($"Year: {calendar.GetYear(now)}");
Console.WriteLine($"Month: {calendar.GetMonth(now)}");
Console.WriteLine($"Day: {calendar.GetDayOfMonth(now)}");
}
}
如果您只想将值格式化为字符串,可以将CultureInfo
传递给ToString
来电:
using System;
using System.Globalization;
public class Test
{
static void Main()
{
var culture = new CultureInfo("fa-ir");
var now = DateTime.Now;
Console.WriteLine(now.ToString(culture));
}
}
此处,CultureInfo
有一个与之关联的默认日历(以及日期/时间格式字符串),用于格式化值。
DateTime
本身总是有效地存在于公历系统中 - 例如,无法在波斯日历中创建“DateTime
”或“转换”DateTime
一个日历到另一个日历。
请注意,在我的Noda Time库中,这不是真的 - 您可以为ZonedDateTime
,OffsetDateTime
,LocalDate
指定日历系统或LocalDateTime
值,并从一个转换为另一个。如果你正在进行大量的日历工作,我建议你至少尝试一下Noda Time - 它的目的是让你更难以犯这种错误。