C# 按日期排序包含日期值的列表

C# 按日期排序包含日期值的列表,c#,C#,我正在做一个时钟程序,我有一个问题,让我的打卡机在正确的顺序。日期是按顺序排列的,但是list.Sort却把时间弄乱了。它像字符串一样对其进行排序,这很有意义,因为它是一个字符串。下午3:41分在上午7:20之前排序,因为3在7之前。见示例: 12/17/2018 3:41:00 PM Clock Out Yes BB 12/17/2018 7:20:00 AM Clock In NO

我正在做一个时钟程序,我有一个问题,让我的打卡机在正确的顺序。日期是按顺序排列的,但是list.Sort却把时间弄乱了。它像字符串一样对其进行排序,这很有意义,因为它是一个字符串。下午3:41分在上午7:20之前排序,因为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());
}
我将%放在那里,以便稍后在%处拆分字符串,以在时间卡中填充打卡时间、打卡类型、需要的批准和批准

我的问题是如何按日期和时间对字符串排序

编辑

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)

在填充它时,您可能还想加入一些错误检查,对DateTime使用TryParseExact等。您可以进行多种改进。最后,当您想要显示数据时,就是将其作为字符串输出的时候。您可以通过重写自定义类上的.ToString使之变得非常简单。

为什么不创建一个包含datetime和punch类型的对象列表,而不是创建一个以后必须解析的字符串?创建一个以原始格式保存所有4个变量的类,并将其用于列表。然后将该对象的一个新实例添加到您的列表中,假设这是可能的。然后您可以使用OrderByx=>x.Punch,其中Punch是保存DateTimeCreate的变量。为字段创建类是最佳选择。出于某种未知的原因,如果您必须将其保持为字符串格式,尝试将时间格式化为HH:mm格式,这样时间将从下午3点改为15小时。除了其他人的评论/回答之外:如果这是DataReader,则应1在查询中指定返回的列,2以其本机格式读取类型,而不是将其转换为字符串,然后再次解析。示例:这使他可以更轻松地将我的信息放入时钟数据。然而,它仍然没有正确排序我的时间卡。我仍然有信息混乱,我一辈子都不知道该怎么做。只有几个月的时间,我才刚刚开始编写代码,我非常感谢您在这个问题上的帮助。@BrettByrd:如果您是按实际日期时间值而不是字符串排序,那么它应该正确排序。什么坏了?看看每一行时间卡,它根本没有改变顺序。我甚至回到了这个月的第一天,那里到处都有日期。他们中的大多数是有序的,但是,例如,很多12月17日的拳击都在12月18日的冲刺中被正确地打印出来。就像我说的,我是新来的,不知道我把事情搞砸了。@BrettByrd:嗯,我看不到你的代码,所以我现在没什么可以做的。也许你可以编辑这个问题以包含更新的信息?我会记住这一点。我只是从一本非常大的书和Stackoverflow中自学如何做到这一点,我非常认真地对待任何输入和帮助。它工作!!!我每天早上7点都在做这件事,现在我正试着把这些时间卡按正确的顺序排列。你帮了很多忙,我非常真诚地感谢你的帮助。祝你圣诞快乐!
timeClockDataList.OrderBy(x => x.Punch)