我正在写一段代码,它接收访问日志并清理它。删除我不需要的所有数据,并给我一个干净的版本。我已经从redunadant数据清理它,但我需要重新格式化日期,这是文本文件中的一个字段。 (到目前为止,下面是已清理的文本文件)
我最初计划将它拆分为'/',然后将日期的3个元素放入一个数组(日,月,年)并重新排列,以便日期采用美国格式 - 但是这会打破'/'的文件路径,我不希望这样。
以下是我的代码到目前为止,我们非常感谢任何帮助或想法!
在这里输入代码
StreamReader reader = new StreamReader(fileName);
StreamWriter writer = new StreamWriter(newFileName);
string line;
string personalIdentifier = new string(fileName.Take(4).ToArray());
string gender = fileName.Substring(fileName.Length - 5, 1);
string classification = fileName.Substring(fileName.Length - 8, 2);
string text = string.Empty;
while ((line = reader.ReadLine()) != null)
{
string[] cleanArray;
cleanArray = new string[7];
var result = line.Split('"')
.Select((element, index) => index % 2 == 0
? element.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
: new string[] { element })
.SelectMany(element => element).ToList();
cleanArray[0] = personalIdentifier;
cleanArray[1] = gender;
cleanArray[2] = classification;
cleanArray[3] = result[0];
cleanArray[4] = result[3];
cleanArray[5] = result[5];
cleanArray[6] = result[6];
//removing the [ at the start of the date
cleanArray[4] = cleanArray[4].Substring(1);
//re-formatting the date so that it can be accepted by machine learning
var dateString = cleanArray[4];
var date = DateTime.ParseExact(dateString, "dd/MMM/yyyy:HH:mm:ss", CultureInfo.InvariantCulture);
var newDateString = date.ToString("yyyy-MM-dd HH:mm:ss");
//push each clean array onto the file that has been automatically created at the top
writer.WriteLine(string.Join(", ", cleanArray.Select(v => v.ToString())));
writer.WriteLine();
}
reader.DiscardBufferedData();
writer.Close();
reader.Close();
}
答案 0 :(得分:2)
您可以将String
解析为DateTime
,然后以您想要的格式将DateTime
解析为String
。这样的事情。
var dateString = "29/Oct/2014:13:36:07";
var date = DateTime.ParseExact(dateString, "dd/MMM/yyyy:HH:mm:ss", CultureInfo.InvariantCulture);
var newDateString = date.ToString("yyyy-MM-dd");
你会得到
2014年10月29日
如果您还需要时间,请将最后一个命令更改为
var newDateString = date.ToString("yyyy-MM-dd HH:mm:ss");
你会得到
2014-10-29 13:36:07
有关详细信息,请查看MSDN
答案 1 :(得分:0)
将数据存储在字符串fromat(或从中检索)非常棘手。您需要以下内容:
我的第一个建议是永远不要将DateTimes存储或传输为字符串。失败了:
您可以确切地知道文件的编码。由于这是一个日志,它将保持旧的ASCII设置。编码在char 127下变得不那么相关.XML倾向于为你处理这部分。
文化格式是一个问题。默认情况下,ToString()和Parse()以及所有其他变体从Windows检索文化格式。仅仅因为它们使用相同的语言,并不意味着它们具有相同的格式。例如,英国和美国的日期格式完全不同。 所以总是选择一个固定的并硬编码。自动文化格式仅适用于直接用户输入,没有其他内容。
对于时区,我的建议是始终以UTC格式存储和检索。否则你必须适应原作者使用的时区(你可能不知道也可能不一致)和你自己的(你的DateTime.ToString()会为你做的)。