2

我使用了一个 Web 服务,它以英文短格式为我提供日期,即 2015 年 3 月 21 日。然后该站点以正确的语言显示日期。这适用于所有语言(en、de、es、it、hu),但当月份是三月(三月)时除外。然后它在 es 中失败,并且只有它。

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

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

任何意见,将不胜感激。

4

3 回答 3

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是英语(显然也是西班牙语)月份 March 的缩写,您可以使用以下命令强制它适用于每种语言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#,我希望你能明白。

于 2014-01-13T15:42:46.800 回答
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
于 2014-01-13T16:23:04.663 回答
1

您可以parse使用特定于区域性的格式信息将日期和时间的字符串表示为等效的 DateTime。

Dim d As Date = Date.Parse("21 Mar 2015", New CultureInfo("en-US"))
于 2014-01-13T15:50:38.660 回答