如何在.NET中将日期转换为太阳历?

3

我在数据库中有大量的日期,保存格式类似于12/18/2013

现在我需要将其转换为太阳历日期,例如1392/09/27

有没有什么方法可以进行转换?(获取农历日期并将其转换为太阳历日期)

我需要使用vb.net实现。


1
你有没有考虑写一个函数来进行转换? - gleng
如果你想要VB,那为什么标记的是C#? - user2509901
在第一步中,我正在寻找现成的类或库。我不知道是否有这样的东西。如果C#中有类似的东西,我可以将其转换为VB ;) - user3091887
1
@gleng,我应该为我替他解决了问题而感到内疚,还是为此感到自豪呢? ;) - crthompson
1
你在谈论哪个文化?你能从这个列表中选择吗?(http://msdn.microsoft.com/en-us/goglobal/bb896001.aspx) - Steven Doggart
1
哦天啊... 托尼小马又来了 - JDB
2个回答

3

.NET中的System.Globalization命名空间提供了多种不同的日历

您可以通过创建一个日期并从其他日历中获取天、月和年来在这些日历之间进行转换。

Sub Main()
    Dim gregorianDate = DateTime.Parse("12/18/2013")

    Dim solarCalendar = New PersianCalendar()

    Dim solarDay = solarCalendar.GetDayOfMonth(gregorianDate)
    Dim solarMonth = solarCalendar.GetMonth(gregorianDate)
    Dim solarYear = solarCalendar.GetYear(gregorianDate)

    Console.WriteLine("{0}/{1}/{2}", solarYear, solarMonth, solarDay)
    Console.Read()
End Sub

输出:

1392/9/27

经过一番思考,波斯历 返回了你所寻找的“太阳”日期。


1
有没有任何函数可以转换日期? - user3091887
@user3091887,类似这样的函数可能适合您。然而,我没有得到您的确切输出,所以我想知道是否希吉历是正确的选择。但也许您的值有误? - crthompson
非常感谢,实际上我需要类似这样的东西,但是有一个问题,这是伊斯兰教历日期,而我需要太阳历日期。是否有适用于太阳历的类? - user3091887
1
在伊斯兰教历中有一个名为HijriAdjustment的属性。 此外,还需要确定文化,正如@StevenDoggart和其他人所指出的那样。 - crthompson
1
@user3091887,你需要波斯历。我已经调整了我的代码。 - crthompson
显示剩余4条评论

1
你可以在解析日期/时间时指定所需的文化(Culture),方法如下:
Dim parsedDateTime As Date = Date.Parse("12/18/2013", CultureInfo.GetCultureInfo("en-US"))

您可以在将日期/时间格式化为字符串时指定要使用的语言环境,如下所示:
Dim formatted As String = parsedDateTime.ToString("yyyy/mm/dd", CultureInfo.GetCultureInfo("th"))

因此,您可以通过结合这两个步骤来从一种文化转换到另一种文化,就像这样:

Public Function ConvertDateStringToCulture(dateString As String, fromCulture As String, toCulture As String) As String
    Dim parsedDateTime As Date = Date.Parse(dateString, CultureInfo.GetCultureInfo(fromCulture))
    Dim formatted As String = parsedDateTime.ToString("yyyy/mm/dd", CultureInfo.GetCultureInfo(toCulture))
    Return formatted
End Function

比如,如果你想将美国日期转换为泰国日期,可以像这样进行:

Dim converted As String = ConvertDateStringToCulture("12/18/2013", "en-US", "th")

然而,您需要选择正确的文化背景进行翻译。这里是支持的文化背景列表

谢谢,我需要“fa”文化,我尝试了,但是不知道为什么结果不正确!!! - user3091887

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接