CSV文件中的C#日期

时间:2015-11-29 18:24:38

标签: c# csv

我必须更改一个包含多个日期的csv文件。每行都以一个跟随数据的日期开始。 11-NOV-2015,数据,数据,数据 10-NOV-2015,数据,数据,数据 9-NOV-2015,数据,数据,数据

使用以下代码我将数据放在正确的位置(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)月份必须从nov变为11

2)在我下载的文件中,例如9-nov-2014必须更改为09. 8-nov-2014到08.所以额外的0.

如何在C#

中解决这个问题

2 个答案:

答案 0 :(得分:2)

您应该使用已经可用的功能,而不是制作自己的日期时间格式解析器。当您知道确切的格式时,IBM Containers Docs是您在日期中转换字符串的工具 以您喜欢的字符串格式转换日期是另一项任务,可以通过覆盖特定于日期时间的 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);
    }
}

答案 1 :(得分:1)

我会将字符串解析为日期,然后使用自定义日期格式将其写回。从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
}