【问题标题】:Ordinal Date Format C#序数日期格式 C#
【发布时间】:2010-10-26 14:41:56
【问题描述】:

问题:

您将获得格式为 YYYYddd 的日期,即年份,然后是一年中的日期,从 1 到 365(366)。例如今天是 2009135 (5/15/2009)。

从中创建新日期时间的最佳方法是什么?在 Ruby 中,我知道有一个构造函数接受两个数字,像这样

Date.ordinal(2009, 135)

C#有类似的构造函数吗?

【问题讨论】:

    标签: c# datetime ordinal


    【解决方案1】:
    int year = 2009;
    int month = 1;
    int day = 1;
    int dayOfYear= 135;
    
    DateTime myDate  = new DateTime(year, month, day);
    myDate.AddDays(dayOfYear - 1);
    

    【讨论】:

      【解决方案2】:

      怎么样:

      new DateTime(ordinal / 1000, 1, 1).AddDays((ordinal % 1000) - 1);
      

      这取决于 2009 年的第 1 天被表示为 2009001 而不是 20091。如果是后者,那就有点棘手了(当然,虽然还不是很困难)。

      不过,我会尝试很快地摆脱这种格式 - 它并不完全是一种常见的格式,而且完全不可读。假设“2009001”格式至少排序合理,但我想不出其他有利于它的东西。

      【讨论】:

      • 哦,相信我,这就是我要转换它的原因。这就是它被交给我们的方式。我们采用该格式并将其导入我们的数据库,但将其转换为正常的日期时间。顺便说一句,我喜欢你的回答,它让我像第一个答案一样做,但我宁愿在一行中做。猜猜它在我身上的红宝石。是的,它总是以 YYYYddd 格式出现。
      • 顺便说一句,我实际上只是把答案给了其他人。他只有4k积分,我想分享爱。
      • 没问题 - 我不认为失去 15 会伤害我太多 :)
      【解决方案3】:

      嗯,我不确定是否有更直接的方法,但这应该可行

      new DateTime(year, 1, 1).AddDays(day - 1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-22
        相关资源
        最近更新 更多