【问题标题】:Is this a valid German Datetime Culture format?这是有效的德国日期时间文化格式吗?
【发布时间】:2018-08-28 09:49:45
【问题描述】:

所以我使用了一个 API,其中以以下格式检索日期时间 DIE, 28. AUG 2018 12:38:38

我找到的最接近的日期时间格式是 ddd, dd. MMM yyyy HH:mm:ss。 它仅在其 DI 时才有效,但 API 将这一天提供为 DIE

是否存在可以解析DIE, 28. AUG 2018 12:38:38的格式我相信这个API的开发者使用了一些不同的格式。

有人知道它是什么吗?

编辑:我尝试过的一些代码

static void Main(string[] args)
{
    const string DateTimeFormat = "ddd, dd. MMM yyyy HH:mm:ss";
    var deCultureInfo = new CultureInfo("de-DE");

    string input = "DIE, 28. AUG 2018 14:12:01";

    // both throws exception
    var timestamp1 = DateTime.ParseExact(input, DateTimeFormat, deCultureInfo);
    var timestamp2 = DateTime.Parse(input, deCultureInfo);


    //Console.WriteLine(DateTime.Now.ToString(deCultureInfo));

}

【问题讨论】:

  • 有趣的是MON, 27. AUG 2018 12:38:38 有效。在德国,工作日通常只缩写为 2 个字母。与DateTime.Parse 一起工作的唯一3 个字母的工作日是Mon 的钱。
  • 实际上,如果 CultureInfo 是 ` CultureInfo.InvariantCulture` ,它会起作用,所以你是对的,它是一个误导性信息。我编辑了它。

标签: c# datetime cultureinfo


【解决方案1】:

您可以在已使用的DateTimeFormatInfo 的属性AbbreviatedDayNames 中覆盖ddd

const string DateTimeFormat = "ddd, dd. MMM yyyy HH:mm:ss";
var deCultureInfo = new CultureInfo("de-DE");

var input = "DIE, 28. AUG 2018 14:12:01";

CultureInfo ci = CultureInfo.CreateSpecificCulture("de-DE");
DateTimeFormatInfo dtfi = ci.DateTimeFormat;

// addjust this to your german strings
dtfi.AbbreviatedDayNames = new[] { "SON", "MON", "DIE", "MIT", "DON", "FRE", "SAM" };

var timestamp1 = DateTime.ParseExact(input, DateTimeFormat, dtfi);

doku.看到这个

【讨论】:

    【解决方案2】:

    只是提供另一种选择:只是不要

    无论那部分是什么,它都是多余的。 2018 年 8 月 28 日是不可能的。那里的信息对计算机没有价值。这种格式是为人类设计的,他们不能在几个 CPU 周期内“查找”。

    不解析input,只解析input.Split(",").Last().Trim()。此 API 显然不是由专家编写的,也不是打算供另一台计算机使用(德语日期格式、工作日、错误 工作日格式)。看起来这是一个显示给产品最终用户的字符串。将其视为随时破坏更改的风险,它可能是用户在特定时间“最喜欢”的任何东西。

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多