【问题标题】:C# Date in CSV fileCSV 文件中的 C# 日期
【发布时间】:2015-11-29 18:24:38
【问题描述】:

我必须更改一个包含多个日期的 csv 文件。每行都以日期开头,后跟数据。 2015 年 11 月 11 日,数据,数据,数据 2015 年 11 月 10 日,数据,数据,数据 2015 年 11 月 9 日,数据,数据,数据

使用以下代码,我将数据放在正确的位置 (20141109 (yyyymmdd))

string[] values = lines1[i].Split(',');

if (values.Length >= 3)
{
    string[] parts = values[0].Split('-');
    if (parts.Length == 3)
    {
        values[0] =  String.Format("{0}-{1}-{2}", parts[2], parts[1], parts[0]);
        lines1[i] = String.Join(",", values);
    }
}

但仍然存在两个问题: 1) 月份必须从 11 月更改为 11 日

2) 在我下载的文件中,例如 2014 年 11 月 9 日必须更改为 09。2014 年 11 月 8 日必须更改为 08。所以额外的 0。

如何在 C# 中解决这个问题

【问题讨论】:

标签: c# csv


【解决方案1】:

与其制作自己的日期时间格式解析器,不如使用现有的解析器。 DateTime.TryParseExact 是您在知道确切格式时将字符串转换为日期的工具。
以您喜欢的字符串格式转换回日期是另一项任务,可以通过覆盖特定于日期时间的 ToString() 轻松解决

string[] values = lines1[i].Split(',');
if (values.Length >= 3)
{
    DateTime dt;
    if (DateTime.TryParseExact(values[0], "d-MMM-yyyy", 
        System.Globalization.CultureInfo.CurrentCulture, 
        System.Globalization.DateTimeStyles.None, out dt))
    {
        values[0] = dt.ToString("yyyyMMdd");
        lines1[i] = String.Join(",", values);
    }
}

【讨论】:

  • 上述解决方案对我来说很好。只有日期是美国格式,所以没有转换,例如,如果日期是 oktober。欧洲符号是 okt 但美国是 oct。如何解决?
  • 嗯,当您在不同的语言环境中测试这些条件时,总是一项艰巨的任务。您可以尝试删除 CurrentCulture 参数并传递一个空值,或者您可以尝试创建一个与您的日期格式匹配的 CultureInfo with a specific locale 实例 IE:CultureInfo ci = new CultureInfo("de-DE") 并检查结果。我建议使用 LinqPAD 之类的工具来测试您的代码 sn-ps,以寻找日期字符串和 CultureInfo 的正确组合。
【解决方案2】:

我会将字符串解析为日期,然后使用自定义日期格式将其写回。从this link我们可以写出这段代码:

String pattern = "dd-MMM-yyyy";
DateTime dt;
if (DateTime.TryParseExact(values[0], pattern, CultureInfo.InvariantCulture, 
                           DateTimeStyles.None,
                           out dt)) {
    // dt is the parsed value
    String sdt = dt.ToString("yyyyMMdd"); // <<--this is the string you want
} else {
    // Invalid string, handle it as you see fit
}

【讨论】:

    猜你喜欢
    • 2021-07-01
    • 1970-01-01
    • 2016-07-25
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多