我使用一种网络服务,以英文短格式(即2015年3月21日)提供日期。然后,网站以正确的语言显示日期。这适用于所有语言(en,de,es,it,hu)除了当月是3月(3月)。然后它只在es中失败了。
我尝试过隐式日期转换以及Date.Parse(somedatestring)。两者都给出了相同的结果。
该站点是Win 2012服务器IIS8上的WebForms .NET 4.5 VB。我完全难过了。
任何建议都将受到赞赏。
答案 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