【问题标题】:How to convert a date of integers to a formated date string (i.e. 2012009 to 2/01/2009)如何将整数日期转换为格式化的日期字符串(即 2012009 到 2/01/2009)
【发布时间】:2011-04-02 23:54:11
【问题描述】:

有什么想法吗? 我什么都想不出来。

我有一个从 csv 文件加载的日期列表,它们保存为所有整数,或者更确切地说是一个整数字符串(即 2009 年 1 月 1 日 = 1012009)

关于如何将 1012009 变成 1/01/2009 的任何想法?

谢谢!

【问题讨论】:

  • 注意前导零。
  • Mddyyyy,还是dMMyyyy? 1 月 1 日没有多大帮助:)
  • 格式为 MMddyyyy 和 Mddyyyy。我将另一个答案标记为答案,因为它最适合我。这个也可以。

标签: c# string datetime date


【解决方案1】:
int date = 1012009;

var month = date / 1000000;
var day = (date / 10000) % 100;
var year = date % 10000;

var formatted = new DateTime(year, month, day).ToString();

假设月-日-年;如果数字是日-月-年,我相信您将能够交换月和日变量以适应这种情况。

如果您想自定义日期格式,可以按照以下说明进行操作:

【讨论】:

  • 当从 csv(文本)中读取并格式化为没有分隔符的日期时,我实际上不会将其视为整数。我会直接从字符串中解析它。
【解决方案2】:

由于日期存储为字符串,您可能需要使用ParseExact

DateTime date = DateTime.ParseExact("28012009", "dMMyyyy", null);

ParseExact 如果格式不匹配会抛出异常。它还有其他重载,如果需要,您可以在其中指定多个可能的格式。请注意,这里的providernull,它使用当前的文化。
根据您可能希望使用的样式TryParseExact

【讨论】:

    【解决方案3】:

    设 10102009 为 dateInt。

    string dateString = dateInt.ToString();
    int l = dateString.Length;
    dateString = dateString.Insert(l-3,"/");
    dateString = dateString.Insert(l-6,"/");
    

    你现在应该在 dateString 中有 1/01/2009.. 你也可以试试ParseExact 函数..

    【讨论】:

    • 丢弃Insert的结果。
    • 仍然不热 - dateStringintl 应该是 int。通常最好先运行代码,确保它工作正常。
    猜你喜欢
    • 1970-01-01
    • 2013-12-28
    • 2011-12-14
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多