全球化和日期转换

时间:2014-01-13 15:34:11

标签: .net vb.net date language-translation

我使用一种网络服务,以英文短格式(即2015年3月21日)提供日期。然后,网站以正确的语言显示日期。这适用于所有语言(en,de,es,it,hu)除了当月是3月(3月)。然后它只在es中失败了。

我尝试过隐式日期转换以及Date.Parse(somedatestring)。两者都给出了相同的结果。

该站点是Win 2012服务器IIS8上的WebForms .NET 4.5 VB。我完全难过了。

任何建议都将受到赞赏。

3 个答案:

答案 0 :(得分:2)

此代码适用于您的字符串和es-ES文化(西班牙文):

var esCulture = CultureInfo.CreateSpecificCulture("es-ES");
var format = "dd MMM yyyy";
DateTime dt;
if (DateTime.TryParseExact("21 Mar 2015", format, esCulture, DateTimeStyles.None, out dt))
{
    Console.WriteLine("Parsed successfully: " + dt.ToString());
}

但由于Mar是月游的英文(显然也是西班牙语)缩写,因此您可以使用CultureInfo.InvariantCulture强制它适用于所有语言:

DateTime.TryParseExact("21 Mar 2015", format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt));

如果您想将DateTime转换为正确的语言,可以使用DateTime.ToString

var cultures = new[] { 
    CultureInfo.CreateSpecificCulture("en-US"), CultureInfo.CreateSpecificCulture("de-DE"),
    CultureInfo.CreateSpecificCulture("es-ES"), CultureInfo.CreateSpecificCulture("it-IT"), CultureInfo.CreateSpecificCulture("hu-HU")
};
foreach(var culture in cultures)
     Console.WriteLine(dt.ToString("dd MMM yyyy", culture));

编辑:对不起C#,我希望你能得到这个想法。

答案 1 :(得分:1)

您可以parse使用特定于文化的格式信息,将日期和时间的字符串表示形式与其DateTime等效。

Dim d As Date = Date.Parse("21 Mar 2015", New CultureInfo("en-US"))

答案 2 :(得分:1)

谢谢蒂姆。将其排序为: -

Public Shared Function translateDate(ByVal passedDate As String)
    Dim outputDate As Date
    Dim isDate As Boolean = DateTime.TryParseExact(passedDate, "dd MMM yyyy", CultureInfo.CurrentUICulture(), DateTimeStyles.None, outputDate)
    outputDate = If(isDate, outputDate, "No Date")
    Return outputDate.ToString("dd MMM yyyy")
End Function