将本地化字符串转换为日期时间

本文关键字:日期 时间 转换 本地化 字符串 | 更新日期: 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"));
        }
    }
}