我正在开发一个时钟程序,但是我的时间安排在正确的顺序时遇到了问题。日期是有序的,但是list.Sort()使时间混乱了。它像字符串一样对它进行排序,这很有意义,因为它是字符串。 3:41 PM在7:20 AM之前进行排序,因为3在7之前。请参见示例:
12/17/2018 3:41:00 PM Clock Out Yes BB
12/17/2018 7:20:00 AM Clock In NO Not Needed
由于要转储到列表中的信息,我不确定如何完成此操作。
while (reader.Read())
{
timeClockDataList.Add(reader["Punch"].ToString() + "%" + reader["PunchType"].ToString() + "%" + reader["NeedsApproval"].ToString() + "%" + reader["Approval"].ToString());
}
我将“%”放入其中,以便稍后可以在%处分割字符串,以在打卡时间中插入打卡时间,打卡类型,所需的批准和批准。
我的问题是如何按日期和时间对字符串进行排序?
EDIT
while (reader.Read())
{
timeClockDataList.Add(new ClockData
{
Punch = DateTime.Parse(reader["Punch"].ToString()),
PunchType = reader["PunchType"].ToString(),
NeedsApproval = reader["NeedsApproval"].ToString(),
Approval = reader["Approval"].ToString(),
});
//***This is the old code that makes one long string***
//timeClockDataList.Add(reader["Punch"].ToString() + "%" + ToString() + +
}
timeClockDataList.OrderBy(x => x.Punch);
//***This is the old code that would sort the list string***
//timeClockDataList.Sort();
using (StreamWriter writer = new StreamWriter(filePath, true))
{
for (int _i = 0; _i < timeClockDataList.Count; ++_i)
{
punch = timeClockDataList[_i].Punch.ToString();
punchType = timeClockDataList[_i].PunchType;
needsApproval = timeClockDataList[_i].NeedsApproval;
approval = timeClockDataList[_i].Approval;
writer.WriteLine(String.Format("{0,-5}{1,-30}{2,-20}{3,-11}{4,-15}", " ", punch, punchType, needsApproval, approval));
punch = null;
punchType = null;
needsApproval = null;
approval = null;
}
}
答案 0 :(得分:7)
timeClockDataList
是错误的类型。如果所有内容都是一个大字符串,那么您就没有数据,而只有一个大字符串。
创建一个自定义对象来存储您的数据。例如:
class ClockData
{
public DateTime Punch { get; set; }
public string PunchType { get; set; }
// etc.
}
将数据读取到该类的列表中:
while (reader.Read())
{
timeClockDataList.Add(new ClockData
{
Punch = DateTime.Parse(reader["Punch"].ToString()),
PunchType = reader["PunchType"].ToString(),
// etc.
});
}
现在您有了实际的数据,可以对它们进行操作/排序/其他操作。轻松地:
timeClockDataList.OrderBy(x => x.Punch)
您可能还希望在填充它时进行一些错误检查,将TryParseExact
用作DateTime
,依此类推。您可以进行多种改进。最终,当您要显示数据时,即为,当您将其输出为字符串时。 (您可以通过在自定义类上覆盖.ToString()
来使其变得非常简单。)