将本地化字符串转换为日期时间
本文关键字:日期 时间 转换 本地化 字符串 | 更新日期: 2023-09-27 18:18:37
我想将本地化字符串(最好是任何受支持的语言)转换为datetime对象。字符串例如(荷兰语):woensdag 3 juni 2015 9:12:14 uur CEST
本地化字符串总是相同的格式:[日名称][日][月][年][小时][分钟][秒][小时的字面意思][时区]提供给程序的字符串不能在主机应用程序上更改(没有足够的权限)。
我读到,在c# . net中,我需要使用一个类似于InvariantCulture对象的东西来将DateTime对象更改为本地化字符串日期。
然而,有没有可能反过来呢?如果可以,是否可以满足我以上的要求?
提前感谢您的帮助!
首先,DateTime
是时区感知。没有任何关于时区的信息。这就是为什么需要将CEST
部分解析为文字分隔符的原因。(AFAIK,除了转义之外没有办法解析它们)看起来uur
在英语中意味着"小时",您需要将其指定为字面量。
然后,您可以使用dddd d MMMM yyyy H:mm:ss 'uur CEST'"
格式和nl-BE
区域性解析字符串,如;
string s = "woensdag 3 juni 2015 9:12:14 uur CEST";
DateTime dt;
if(DateTime.TryParseExact(s, "dddd d MMMM yyyy H:mm:ss 'uur CEST'",
CultureInfo.GetCultureInfo("nl-BE"),
DateTimeStyles.None, out dt))
{
Console.WriteLine(dt); // 03/06/2015 09:12:14
}
你肯定不希望使用InvariantCulture
来解析这个字符串。这种文化是以英语为基础的,并保留DayNames
的英文名称,如Wednesday等。
顺便说一下,Nodatime具有ZonedDateTime
结构,并且看起来它支持具有Zone
属性的时区
我已经设法解决了这个问题,感谢在原始问题下面放置的评论。
通过使用字符串替换,我可以将本地化的'uur'与CEST一起在荷兰语中代表小时。
下面的代码为我做到了:
CultureInfo nlculture = new CultureInfo("nl-NL");
string test = "woensdag 3 juni 2015 9:12:14";
DateTime dt = DateTime.ParseExact(test, "dddd d MMMM yyyy H:mm:ss", nlculture);
System.Windows.MessageBox.Show(dt.ToString());
回到其中一个需求上,它需要支持多种语言。我可以(在再次检查我可以处理的事情之后)捕获使用的语言,从而使我能够支持多种语言。
谢谢大家的帮助
下面的代码应该可以工作。我得到一个错误,但我认为这是由于一个旧版本的VS安装在我的电脑上
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Globalization;
namespace ConsoleApplication53
{
class Program
{
static void Main(string[] args)
{
DateTime x = DateTime.ParseExact("3 june 2015 9:12:14 PM GMT", "d MMMM yyyy h:mm:ss tt Z", CultureInfo.InvariantCulture);
string y = x.ToString("d MMMM yyyy h:mm:ss tt K", CultureInfo.CreateSpecificCulture("nl-NL"));
string dutchTimeString = "3 juni 2015 9:12:14 uur CEST";
DateTime date = DateTime.ParseExact(dutchTimeString, "d MMMM yyyy h:mm:ss tt Z", CultureInfo.CreateSpecificCulture("nl-BE"));
}
}
}