解析法语日期

发布于 2024-09-03 17:49:53 字数 400 浏览 2 评论 0 原文

我正在尝试将法国日期解析为 DateTime 对象,但到目前为止还没有成功。有办法做到这一点吗?

String foo = "mar, 20 avr 2010 09:00:00 -0500";

我已经尝试过解析不同的文化并改变线程的文化。

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA",true);
CultureInfo culture = new CultureInfo("fr-CA",true);
DateTime.Parse(foo,culture,DateTimeStyles.AdjustToUniversal);

I am trying to parse a French date to a DateTime object with no luck so far. Is there a way to do that?

String foo = "mar, 20 avr 2010 09:00:00 -0500";

I've already tried parsing with a different culture and changing the culture of the thread.

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA",true);
CultureInfo culture = new CultureInfo("fr-CA",true);
DateTime.Parse(foo,culture,DateTimeStyles.AdjustToUniversal);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

束缚m 2024-09-10 17:49:53

您只能解析(使用 Parse 或 ParseExact)格式化 DateTime 时可以创建的内容。

与示例输入最接近的自定义格式说明符可能是这样的:

ddd, dd MMM yyyy HH':'mm':'ss zzz

代码:

CultureInfo culture = new CultureInfo("fr-CA", true);

var f = new DateTimeOffset(2010, 04, 20, 09, 00, 00, TimeSpan.FromHours(-5))
            .ToString("ddd, dd MMM yyyy HH':'mm':'ss zzz", culture);

这会产生以下结果:

"mar., 20 avr. 2010 09:00:00 -05:00"

如您所见,短日和短月说明符(dddMMM< /code>)在名称后添加 .,时区说明符 (zzz) 插入 :

我相信不可能欺骗 ToString 生成所需的输出,从而也不用 ParseExact 解析结果。我想您必须使用普通的旧字符串操作自己解析字符串。

You can only parse (with Parse or ParseExact) what you can create when formatting a DateTime.

The closest custom format specifier to your example input is probably something like this:

ddd, dd MMM yyyy HH':'mm':'ss zzz

Code:

CultureInfo culture = new CultureInfo("fr-CA", true);

var f = new DateTimeOffset(2010, 04, 20, 09, 00, 00, TimeSpan.FromHours(-5))
            .ToString("ddd, dd MMM yyyy HH':'mm':'ss zzz", culture);

This produces the following result:

"mar., 20 avr. 2010 09:00:00 -05:00"

As you can see, the short day and short month specifier (ddd and MMM) add a . after the name, and the time-zone specifier (zzz) inserts a :.

I believe it's not possible to trick ToString into generating the desired output, and thereby also not to parse the result with ParseExact. I guess you have to parse the string yourself using plain old string manipulation.

寒冷纷飞旳雪 2024-09-10 17:49:53

我认为您将得到的最接近的是

DateTime.ParseExact("mar., 01 juin 2010 12:11:53 -04:00", "ddd, dd MMM yyyy hh:mm:ss zzz", culture); // extra period after "mar"
// or
DateTime.ParseExact("mardi, 01 juin 2010 12:12:33 -04:00", "dddd, dd MMM yyyy hh:mm:sszzz", culture ); // full day name

为什么 DateTime.Parse 不起作用:

DateTime.Parse

s 参数必须包含
日期和时间的表示
返回的格式之一
DateTimeFormatInfo.GetAllDateTimePatterns()
当前文化的方法。

在我的计算机上,使用此代码,我得到以下格式。您的模式似乎不在列表中。

    CultureInfo culture = new CultureInfo("fr-CA", true);

    foreach( string dateTimePattern in culture.DateTimeFormat.GetAllDateTimePatterns())
    {
        Debug.WriteLine(dateTimePattern);
    }
  • yyyy-MM-dd
  • 年-月-日
  • 日-月-年
  • 年月日
  • 日/月/年
  • d MMMM yyyy
  • d MMM yyyy
  • d MMMM yyyy HH:mm
  • d MMMM yyyy H:mm
  • d MMMM yyyy H' h 'mm
  • d MMM yyyy HH:mm
  • d MMM yyyy H:mm
  • d MMM yyyy H' h 'mm
  • d MMMM yyyy HH:mm:ss
  • d MMMM yyyy H:mm:ss
  • d MMMM yyyy H' h 'mm
  • d MMMM yyyy H:mm
  • d MMM yyyy HH:mm:ss
  • d MMM yyyy H:mm:ss
  • d MMM yyyy H' h 'mm
  • d MMM yyyy H:mm
  • yyyy-MM-dd HH:mm
  • yyyy-MM-dd H:mm
  • yyyy-MM-dd H' h 'mm
  • yy-MM-dd HH:mm
  • yy-MM-dd H:mm
  • yy-MM-dd H' h 'mm
  • dd-MM-yy HH:mm
  • dd-MM-yy H:mm
  • dd-MM-yy H' h 'mm
  • 年月日时时:分
  • 年月日时:毫米
  • yy MM dd H' h 'mm
  • 日/月/年 时:分
  • 日/月/年 时:分
  • 日/月/年 H' h 'mm
  • yyyy-MM-dd HH:mm:ss
  • yyyy-MM-dd H:mm:ss
  • yyyy-MM-dd H' h 'mm
  • yyyy-MM-dd H:mm
  • yy-MM-dd HH:mm:ss
  • yy-MM-dd H:mm:ss
  • yy-MM-dd H' h 'mm
  • yy-MM-dd H:mm
  • dd-MM-yy HH:mm:ss
  • dd-MM-yy H:mm:ss
  • dd-MM-yy H' h 'mm
  • dd-MM-yy H:mm
  • 年月日时时:分:秒
  • yy MM dd H:mm:ss
  • yy MM dd H' h 'mm
  • 年月日时:毫米
  • 日/月/年 时:分:秒
  • 日/月/年 时:分:秒
  • 日/月/年 H' h 'mm
  • 日/月/年 时:分
  • d MMMM
  • d MMMM
  • yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
  • yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
  • ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
  • ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
  • yyyy'-'MM'-'dd'T'HH':'mm':'ss
  • 时:分
  • 高:毫米
  • H'h'mm
  • 时:分:秒
  • 高:分:秒
  • H'h'mm
  • 高:毫米
  • yyyy'-'MM'-'dd HH':'mm':'ss'Z'
  • d MMMM yyyy HH:mm:ss
  • d MMMM yyyy H:mm:ss
  • d MMMM yyyy H' h 'mm
  • d MMMM yyyy H:mm
  • d MMM yyyy HH:mm:ss
  • d MMM yyyy H:mm:ss
  • d MMM yyyy H' h 'mm
  • d MMM yyyy H:mm
  • MMMM,年
  • MMMM,年

The closest I think you're going to get is

DateTime.ParseExact("mar., 01 juin 2010 12:11:53 -04:00", "ddd, dd MMM yyyy hh:mm:ss zzz", culture); // extra period after "mar"
// or
DateTime.ParseExact("mardi, 01 juin 2010 12:12:33 -04:00", "dddd, dd MMM yyyy hh:mm:sszzz", culture ); // full day name

Why DateTime.Parse doesn't work:

The documentation for DateTime.Parse says that

The s parameter must contain the
representation of a date and time in
one of the formats returned by the
DateTimeFormatInfo.GetAllDateTimePatterns()
method of the current culture.

On my computer, using this code, I get the following formats. It looks like your pattern isn't in the list.

    CultureInfo culture = new CultureInfo("fr-CA", true);

    foreach( string dateTimePattern in culture.DateTimeFormat.GetAllDateTimePatterns())
    {
        Debug.WriteLine(dateTimePattern);
    }
  • yyyy-MM-dd
  • yy-MM-dd
  • dd-MM-yy
  • yy MM dd
  • dd/MM/yy
  • d MMMM yyyy
  • d MMM yyyy
  • d MMMM yyyy HH:mm
  • d MMMM yyyy H:mm
  • d MMMM yyyy H' h 'mm
  • d MMM yyyy HH:mm
  • d MMM yyyy H:mm
  • d MMM yyyy H' h 'mm
  • d MMMM yyyy HH:mm:ss
  • d MMMM yyyy H:mm:ss
  • d MMMM yyyy H' h 'mm
  • d MMMM yyyy H:mm
  • d MMM yyyy HH:mm:ss
  • d MMM yyyy H:mm:ss
  • d MMM yyyy H' h 'mm
  • d MMM yyyy H:mm
  • yyyy-MM-dd HH:mm
  • yyyy-MM-dd H:mm
  • yyyy-MM-dd H' h 'mm
  • yy-MM-dd HH:mm
  • yy-MM-dd H:mm
  • yy-MM-dd H' h 'mm
  • dd-MM-yy HH:mm
  • dd-MM-yy H:mm
  • dd-MM-yy H' h 'mm
  • yy MM dd HH:mm
  • yy MM dd H:mm
  • yy MM dd H' h 'mm
  • dd/MM/yy HH:mm
  • dd/MM/yy H:mm
  • dd/MM/yy H' h 'mm
  • yyyy-MM-dd HH:mm:ss
  • yyyy-MM-dd H:mm:ss
  • yyyy-MM-dd H' h 'mm
  • yyyy-MM-dd H:mm
  • yy-MM-dd HH:mm:ss
  • yy-MM-dd H:mm:ss
  • yy-MM-dd H' h 'mm
  • yy-MM-dd H:mm
  • dd-MM-yy HH:mm:ss
  • dd-MM-yy H:mm:ss
  • dd-MM-yy H' h 'mm
  • dd-MM-yy H:mm
  • yy MM dd HH:mm:ss
  • yy MM dd H:mm:ss
  • yy MM dd H' h 'mm
  • yy MM dd H:mm
  • dd/MM/yy HH:mm:ss
  • dd/MM/yy H:mm:ss
  • dd/MM/yy H' h 'mm
  • dd/MM/yy H:mm
  • d MMMM
  • d MMMM
  • yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
  • yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
  • ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
  • ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
  • yyyy'-'MM'-'dd'T'HH':'mm':'ss
  • HH:mm
  • H:mm
  • H' h 'mm
  • HH:mm:ss
  • H:mm:ss
  • H' h 'mm
  • H:mm
  • yyyy'-'MM'-'dd HH':'mm':'ss'Z'
  • d MMMM yyyy HH:mm:ss
  • d MMMM yyyy H:mm:ss
  • d MMMM yyyy H' h 'mm
  • d MMMM yyyy H:mm
  • d MMM yyyy HH:mm:ss
  • d MMM yyyy H:mm:ss
  • d MMM yyyy H' h 'mm
  • d MMM yyyy H:mm
  • MMMM, yyyy
  • MMMM, yyyy
春夜浅 2024-09-10 17:49:53

日期名称和月份名称未正确缩写,它们需要句点。如果你可以按摩绳子,那么你就可以让它发挥作用:

using System;
using System.Globalization;

class Program {
    static void Main(string[] args) {
        String foo = "mar., 20 avr. 2010 09:00:00 -0500";
        var cvt = CultureInfo.GetCultureInfo("fr-CA").DateTimeFormat;
        var dt = DateTimeOffset.Parse(foo, cvt, DateTimeStyles.RoundtripKind);
        Console.WriteLine(dt);
        Console.ReadLine();
    }
}

The day name and month name are not properly abbreviated, they need a period. If you can massage the string then you could make it work:

using System;
using System.Globalization;

class Program {
    static void Main(string[] args) {
        String foo = "mar., 20 avr. 2010 09:00:00 -0500";
        var cvt = CultureInfo.GetCultureInfo("fr-CA").DateTimeFormat;
        var dt = DateTimeOffset.Parse(foo, cvt, DateTimeStyles.RoundtripKind);
        Console.WriteLine(dt);
        Console.ReadLine();
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文