【问题标题】:DateTime.Parse - changes formatDateTime.Parse - 更改格式
【发布时间】:2014-01-10 19:59:50
【问题描述】:

我将尝试举例说明:

var dateNow = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

制作:10/01/2014 21:50:34

var dateNowParse = DateTime.Parse(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"));

制作:10/01/2014 9:50:34 PM

问题:

如何解析日期,并保持格式如下: dd/MM/yyyy HH:mm:ss24 小时格式,没有任何PM

谢谢!

更新 1

对不起,我的问题可能不是很清楚,我将在下面尝试解释真实情况。

请不要关注DateTime.Now的真正含义,假设我们有一个string变量,格式为10/01/2014 21:50:34,然后我尝试解析它,并将结果存储在另一个变量中。我愿意实现的是将结果保存在具有精确格式 10/01/2014 21:50:34 的 DateTime 变量中。

现在这是一个sn-p:

var stringDate = "10/01/2014 22:50:30";
DateTime parsedDate = DateTime.Parse(stringDate, CultureInfo.InvariantCulture);
//parsedDate result is: 10/01/2014 10:50:30 PM

令我沮丧的是:

  1. stringDate 中,22:50 小时表示字符串格式化为24 小时时钟。 (12 时钟格式使用最大 12 小时计数器

  2. 如果我使用 22:50,逻辑上不是输出不应该使用任何 AM PM 和 12 小时格式吗?

【问题讨论】:

  • 不要在问题标题中重复标签。谢谢。
  • 如果您需要使用第一个示例保持格式化,请以字符串形式存储。

标签: c# datetime datetime-format


【解决方案1】:

如何解析日期,并保持格式

如果您愿意,您需要在 DateTime 旁边保留格式。 DateTime 确实没有有任何特定格式的概念。 Parse 返回的 DateTime 的值不是“10/01/2014 9:50:34 PM”——它是那个特定的日期和时间,但不是字符串表示。

您可以有一个类型将两者保持在一起 - 或者如果您总是希望以相同的方式进行格式化,只需在格式化时明确指定该格式,而不是将其保留为具有 DateTime 值的数据。

我个人会在可行的情况下尝试坚持使用DateTime.ParseExact,因为我发现更容易预测它会做什么 - 但它确实取决于您的输入。如果输入的是您期望的特定格式,ParseExact 确实是前进的方向,可能会使用不变的文化来避免任何文化差异。

【讨论】:

    【解决方案2】:

    我现在将日期存储为日期

    DateTime dateNow = DateTime.Now;
    

    然后当您需要使用该格式显示它时

    String strNow = dateNow.ToString("dd/MM/yyyy HH:mm:ss");
    

    如果你有一个格式输入的日期,比如在字符串变量 strNow 中,并且想把它放在 DateTime 中,我会确保捕获格式异常

    DateTime dateNow;
    
    try {
    dateNow = DateTime.ParseExact(strNow, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
    }
    catch (FormatException) {
    //Log something or set a default date.
    }
    

    【讨论】:

    • 显示效果很好,但是当我需要解析这种格式的日期时,它会破坏它,并且我猜会进行一些内置转换(例如更改 24 小时格式)
    【解决方案3】:

    DateTime.ParseExact(DateTime, Format, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowTrailingWhite);

    例如:

    DateTime.ParseExact(strNow, "dd/MM/yyyy HH:mm:ss", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowTrailingWhite);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 2010-09-25
      • 2018-03-30
      • 2020-03-19
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多