我必须更改一个包含多个日期的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#
中解决这个问题答案 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
}