【发布时间】:2017-11-19 23:56:57
【问题描述】:
我想将波斯日期转换为公历日期。我使用此代码。
public static void GetDate()
{
String persianDate="1384/03/15"
Datetime dt= GetComponentDate(persianDate);
}
DateTime GetComponentDate(string fdate)
{
DateTime edate;
int year = int.Parse(Persia.Number.ConvertToLatin(fdate.Split('/')[0]));
int month = int.Parse(Persia.Number.ConvertToLatin(fdate.Split('/')[1]));
int day = int.Parse(Persia.Number.ConvertToLatin(fdate.Split('/')[2]));
try
{
System.Globalization.PersianCalendar x = new System.Globalization.PersianCalendar();
DateTime dt = x.ToDateTime(year, month, day, 0, 0, 0, 0, 0);
return dt;
}
catch
{
}
return DateTime.MinValue;
}
在服务器中,此方法运行良好,输出为 "17/6/2017" 。但在另一台服务器中,此方法不起作用并且输出 =“15/03/1384”,我必须在使用 GetComponentDate 后使用此代码。
((DateTime)dt).ToString(CultureInfo.InvariantCulture);
两台服务器有什么不同? 你能帮帮我吗?
【问题讨论】:
-
“不工作”是什么意思?您也能否提供一些示例输入和调用
GetComponentDate的相关输出? -
什么是
Persia.DateType.Gregorian?调用ToString本身不应该作为一个声明做任何事情......dt是什么?目前这里缺少很多信息。 -
我更新了我的代码。在服务器中,当我仅使用 GetComponentDate 方法时,我可以转换波斯日期,但在另一台服务器中,当我想将音乐会日期转换为字符串时,我应该使用 CultureInfo.InvariantCulture。两台服务器有什么不同?
-
什么是
Persia&Persia.Number?您需要向我们提供minimal reproducible example。我们需要能够运行您的代码。 -
目前还不清楚出了什么问题 - 我怀疑这与您向我们展示的代码无关。如果您硬编码
DateTime值(而不是使用该代码),您会看到相同的结果吗? (请注意,捕获像这样的所有异常是处理无效输入的一种非常丑陋的方式,但这是另一回事。)我强烈怀疑您的一个服务器正在使用使用非公历系统的默认文化,而另一个不是。如果您想要使用特定日历的特定格式,那么指定文化是完全合理的......
标签: c# asp.net-4.6