【问题标题】:Difference between ddMMyy and ddmmyy date formatsddMMyy 和 ddmmyy 日期格式之间的区别
【发布时间】:2015-02-04 07:28:58
【问题描述】:

我想知道C#中ddMMyyddmmyy日期格式的区别。

当我尝试将字节数组转换为日期时,相同的字节会为这两种格式生成不同的日期。

byte[] bb = { 0x30, 0x34, 0x30, 0x32, 0x31, 0x35 };
DateTime ddmm = DateTime.ParseExact(System.Text.Encoding.ASCII.GetString(bb), "ddmmyy", System.Globalization.CultureInfo.InvariantCulture);
DateTime ddmm1 = DateTime.ParseExact(System.Text.Encoding.ASCII.GetString(bb), "ddMMyy", System.Globalization.CultureInfo.InvariantCulture);

ddmm 变量具有“2015 年 1 月 4 日”,而 ddmm1 具有“2015 年 2 月 4 日”。奇怪!!

【问题讨论】:

标签: c# .net datetime


【解决方案1】:

其实很简单。

  • mm 代表分钟;
  • MM 代表月份。

有关规范,请参阅 MSDN 上的 Custom Date and Time Format Strings

【讨论】:

    【解决方案2】:

    mm specifier 是几分钟。 MM specifier 是几个月。

    因为你的

    System.Text.Encoding.ASCII.GetString(bb)
    

    返回040215string,如果你用ddmmyy格式解析,你的日部分将被解析为4,你的分钟部分将被解析为2,你的年部分将被解析正如2015,因为你使用InvariantCulture,并且它的当前日历的Calendar.TwoDigitYearMax property默认为2029

    DateTime 的其他部分将是它们的默认值。这就是为什么你的ddmm 会是;

    04/01/2015 00:02:00 // 4 Jan 2015 2 AM.
    

    但是如果你用ddMMyy格式解析,你的日部分将被解析为4,你的月部分将被解析为2,你的年部分将被解析为2015和其他部分DateTime 中的 em>still 将是它们的默认值。

    这就是为什么你的ddmm1 会是;

    04/02/2015 00:00:00 // 4 Feb 2015 midnight
    

    【讨论】:

    • 如果两种方式的分钟部分都将被解析为 2,那么为什么在第一种情况下是一月,在其他情况下是二月。
    • @user2861226 不,请重新阅读我的回答。当您使用ddmmyy 格式时,您的minutes 部分将被解析为2,但是当您使用ddMMyy 格式时,您的month 部分将被解析为@ 987654350@。在这两种情况下,所有其他未格式化的部分都将被分配它们的 default 值。这就是为什么当您使用ddmmyy 时,您的DateTime 将是04/01/2015 00:02:00,因为您在格式中只指定了日、分和年部分,DateTime 的其他部分(月、小时和秒)将被分配它们的默认值依次为100。这与其他情况相同。
    【解决方案3】:

    日期格式区分大小写。

    MM 产生两位数的月份,而 mm 产生两位数的分钟数。通过here 解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多