Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C对日期列表进行排序#_C#_List_Sorting_Date - Fatal编程技术网

C# 使用C对日期列表进行排序#

C# 使用C对日期列表进行排序#,c#,list,sorting,date,C#,List,Sorting,Date,我得到了一个带有日期、文本和完成属性的条目列表 我想按日期对列表进行排序。日期的格式如下:dd.mm.yyyy 如果我运行这段代码,结果就像什么都没发生一样混乱。怎么了 这是我的代码: // in the namespace struct entry { public string date; public string text; public bool finished; public entry(string _date, string _text, bo

我得到了一个带有
日期
文本
完成
属性的条目列表

我想按日期对列表进行排序。日期的格式如下:
dd.mm.yyyy

如果我运行这段代码,结果就像什么都没发生一样混乱。怎么了

这是我的代码:

// in the namespace
struct entry
{
    public string date;
    public string text;
    public bool finished;

    public entry(string _date, string _text, bool _finished)
    {
        date = _date;
        text = _text;
        finished = _finished;
    }
}

// in my class
List<entry> entrys = new List<entry>();

// ** fill the list with content **

// where i want to sort the list
entrys.Sort(delegate (entry x, entry y)
{
    string date1 = x.date;
    string date2 = y.date;

    // 0123456789
    // dd.mm.yyyy

    int day1 = Convert.ToInt32(date1.Substring(0, 2));
    int day2 = Convert.ToInt32(date2.Substring(0, 2));

    int month1 = Convert.ToInt32(date1.Substring(3, 2));
    int month2 = Convert.ToInt32(date2.Substring(3, 2));

    int year1 = Convert.ToInt32(date1.Substring(6, 4));
    int year2 = Convert.ToInt32(date2.Substring(6, 4));

    if (year1 > year2) return -1;
    if (month1 > month2) return -1;
    if (day1 > day2) return -1;

    return 1;
});
//在命名空间中
结构条目
{
公共字符串日期;
公共字符串文本;
公共图书馆完工;
公共条目(字符串日期、字符串文本、bool完成)
{
日期=_日期;
text=_text;
完成=_完成;
}
}
//在我班上
列表入口=新列表();
//**用内容填写清单**
//我想在哪里对列表排序
条目排序(委托(条目x、条目y)
{
字符串date1=x.date;
字符串date2=y.date;
// 0123456789
//年月日
int day1=Convert.ToInt32(date1.Substring(0,2));
int day2=Convert.ToInt32(date2.Substring(0,2));
int month1=Convert.ToInt32(date1.Substring(3,2));
int month2=Convert.ToInt32(date2.Substring(3,2));
int year1=Convert.ToInt32(date1.Substring(6,4));
int year2=Convert.ToInt32(date2.Substring(6,4));
如果(第1年>第2年)返回-1;
如果(month1>month2)返回-1;
如果(第1天>第2天)返回-1;
返回1;
});
此代码适用于:

entrys.Sort(delegate (entry x, entry y)
        {
            string date1 = x.date;
            string date2 = y.date;

            // 0123456789
            // dd.mm.yyyy

            int day1 = Convert.ToInt32(date1.Substring(0, 2));
            int day2 = Convert.ToInt32(date2.Substring(0, 2));

            int month1 = Convert.ToInt32(date1.Substring(3, 2));
            int month2 = Convert.ToInt32(date2.Substring(3, 2));

            int year1 = Convert.ToInt32(date1.Substring(6, 4));
            int year2 = Convert.ToInt32(date2.Substring(6, 4));

            if (year1 > year2) return 1;
            if (year1 == year2 && month1 > month2) return 1;
            if (year1 == year2 && month1 == month2 && day1 > day2) return 1;

            return -1;
        });
此代码适用于:

entrys.Sort(delegate (entry x, entry y)
        {
            string date1 = x.date;
            string date2 = y.date;

            // 0123456789
            // dd.mm.yyyy

            int day1 = Convert.ToInt32(date1.Substring(0, 2));
            int day2 = Convert.ToInt32(date2.Substring(0, 2));

            int month1 = Convert.ToInt32(date1.Substring(3, 2));
            int month2 = Convert.ToInt32(date2.Substring(3, 2));

            int year1 = Convert.ToInt32(date1.Substring(6, 4));
            int year2 = Convert.ToInt32(date2.Substring(6, 4));

            if (year1 > year2) return 1;
            if (year1 == year2 && month1 > month2) return 1;
            if (year1 == year2 && month1 == month2 && day1 > day2) return 1;

            return -1;
        });
此代码适用于:

entrys.Sort(delegate (entry x, entry y)
        {
            string date1 = x.date;
            string date2 = y.date;

            // 0123456789
            // dd.mm.yyyy

            int day1 = Convert.ToInt32(date1.Substring(0, 2));
            int day2 = Convert.ToInt32(date2.Substring(0, 2));

            int month1 = Convert.ToInt32(date1.Substring(3, 2));
            int month2 = Convert.ToInt32(date2.Substring(3, 2));

            int year1 = Convert.ToInt32(date1.Substring(6, 4));
            int year2 = Convert.ToInt32(date2.Substring(6, 4));

            if (year1 > year2) return 1;
            if (year1 == year2 && month1 > month2) return 1;
            if (year1 == year2 && month1 == month2 && day1 > day2) return 1;

            return -1;
        });
此代码适用于:

entrys.Sort(delegate (entry x, entry y)
        {
            string date1 = x.date;
            string date2 = y.date;

            // 0123456789
            // dd.mm.yyyy

            int day1 = Convert.ToInt32(date1.Substring(0, 2));
            int day2 = Convert.ToInt32(date2.Substring(0, 2));

            int month1 = Convert.ToInt32(date1.Substring(3, 2));
            int month2 = Convert.ToInt32(date2.Substring(3, 2));

            int year1 = Convert.ToInt32(date1.Substring(6, 4));
            int year2 = Convert.ToInt32(date2.Substring(6, 4));

            if (year1 > year2) return 1;
            if (year1 == year2 && month1 > month2) return 1;
            if (year1 == year2 && month1 == month2 && day1 > day2) return 1;

            return -1;
        });

日期字段应成为日期时间。但是,如果出于某种原因需要将其设置为字符串,请执行以下操作:

首先,将GetDate方法添加到条目结构中:

public DateTime GetDate()
{
    int day = Convert.ToInt32(date.Substring(0, 2));

    int month = Convert.ToInt32(date.Substring(3, 2));

    int year = Convert.ToInt32(date.Substring(6, 4));

    return new DateTime(year,month,day);
}
然后,在排序时使用以下命令:

entrys.Sort((x, y) => x.GetDate().CompareTo(y.GetDate()));

日期字段应成为日期时间。但是,如果出于某种原因需要将其设置为字符串,请执行以下操作:

首先,将GetDate方法添加到条目结构中:

public DateTime GetDate()
{
    int day = Convert.ToInt32(date.Substring(0, 2));

    int month = Convert.ToInt32(date.Substring(3, 2));

    int year = Convert.ToInt32(date.Substring(6, 4));

    return new DateTime(year,month,day);
}
然后,在排序时使用以下命令:

entrys.Sort((x, y) => x.GetDate().CompareTo(y.GetDate()));

日期字段应成为日期时间。但是,如果出于某种原因需要将其设置为字符串,请执行以下操作:

首先,将GetDate方法添加到条目结构中:

public DateTime GetDate()
{
    int day = Convert.ToInt32(date.Substring(0, 2));

    int month = Convert.ToInt32(date.Substring(3, 2));

    int year = Convert.ToInt32(date.Substring(6, 4));

    return new DateTime(year,month,day);
}
然后,在排序时使用以下命令:

entrys.Sort((x, y) => x.GetDate().CompareTo(y.GetDate()));

日期字段应成为日期时间。但是,如果出于某种原因需要将其设置为字符串,请执行以下操作:

首先,将GetDate方法添加到条目结构中:

public DateTime GetDate()
{
    int day = Convert.ToInt32(date.Substring(0, 2));

    int month = Convert.ToInt32(date.Substring(3, 2));

    int year = Convert.ToInt32(date.Substring(6, 4));

    return new DateTime(year,month,day);
}
然后,在排序时使用以下命令:

entrys.Sort((x, y) => x.GetDate().CompareTo(y.GetDate()));
始终遵循接吻(保持简单愚蠢)原则:

entrys.Sort(delegate (entry x, entry y)
{
    DateTime dt1 = DateTime.ParseExact(x.date, "dd.MM.yyyy", 
          CultureInfo.InvariantCulture);
    DateTime dt2 = DateTime.ParseExact(y.date, "dd.MM.yyyy", 
          CultureInfo.InvariantCulture);

    return DateTime.Compare(dt1, dt2);
});
始终遵循接吻(保持简单愚蠢)原则:

entrys.Sort(delegate (entry x, entry y)
{
    DateTime dt1 = DateTime.ParseExact(x.date, "dd.MM.yyyy", 
          CultureInfo.InvariantCulture);
    DateTime dt2 = DateTime.ParseExact(y.date, "dd.MM.yyyy", 
          CultureInfo.InvariantCulture);

    return DateTime.Compare(dt1, dt2);
});
始终遵循接吻(保持简单愚蠢)原则:

entrys.Sort(delegate (entry x, entry y)
{
    DateTime dt1 = DateTime.ParseExact(x.date, "dd.MM.yyyy", 
          CultureInfo.InvariantCulture);
    DateTime dt2 = DateTime.ParseExact(y.date, "dd.MM.yyyy", 
          CultureInfo.InvariantCulture);

    return DateTime.Compare(dt1, dt2);
});
始终遵循接吻(保持简单愚蠢)原则:

entrys.Sort(delegate (entry x, entry y)
{
    DateTime dt1 = DateTime.ParseExact(x.date, "dd.MM.yyyy", 
          CultureInfo.InvariantCulture);
    DateTime dt2 = DateTime.ParseExact(y.date, "dd.MM.yyyy", 
          CultureInfo.InvariantCulture);

    return DateTime.Compare(dt1, dt2);
});

你真的很难做到这一点:

var entries = new List<entry>();
// ** fill the list with content **

entries = entries.OrderBy(e => DateTime.ParseExact(e.date, "dd.MM.yyyy", null)).ToList();
var entries=新列表();
//**用内容填写清单**
entries=entries.OrderBy(e=>DateTime.ParseExact(e.date,“dd.MM.yyyy”,null)).ToList();

人们不禁要问,为什么你还没有将
.date
属性作为
DateTime
类型而不是字符串来使用。

你真的很难做到这一点:

var entries = new List<entry>();
// ** fill the list with content **

entries = entries.OrderBy(e => DateTime.ParseExact(e.date, "dd.MM.yyyy", null)).ToList();
var entries=新列表();
//**用内容填写清单**
entries=entries.OrderBy(e=>DateTime.ParseExact(e.date,“dd.MM.yyyy”,null)).ToList();

人们不禁要问,为什么你还没有将
.date
属性作为
DateTime
类型而不是字符串来使用。

你真的很难做到这一点:

var entries = new List<entry>();
// ** fill the list with content **

entries = entries.OrderBy(e => DateTime.ParseExact(e.date, "dd.MM.yyyy", null)).ToList();
var entries=新列表();
//**用内容填写清单**
entries=entries.OrderBy(e=>DateTime.ParseExact(e.date,“dd.MM.yyyy”,null)).ToList();

人们不禁要问,为什么你还没有将
.date
属性作为
DateTime
类型而不是字符串来使用。

你真的很难做到这一点:

var entries = new List<entry>();
// ** fill the list with content **

entries = entries.OrderBy(e => DateTime.ParseExact(e.date, "dd.MM.yyyy", null)).ToList();
var entries=新列表();
//**用内容填写清单**
entries=entries.OrderBy(e=>DateTime.ParseExact(e.date,“dd.MM.yyyy”,null)).ToList();

还有人想知道为什么您还没有将
.date
属性作为
DateTime
类型而不是字符串。如果计算机可以为您手动解析字符串,则无需手动解析字符串:

var provider = System.Globalization.CultureInfo.InvariantCulture;
entrys.Sort((a, b) => 
    DateTime.ParseExact(a.date, "dd.MM.yyyy", provider)
        .CompareTo(DateTime.ParseExact(b.date, "dd.MM.yyyy", provider)));

如果计算机可以为您手动解析字符串,则无需手动解析字符串:

var provider = System.Globalization.CultureInfo.InvariantCulture;
entrys.Sort((a, b) => 
    DateTime.ParseExact(a.date, "dd.MM.yyyy", provider)
        .CompareTo(DateTime.ParseExact(b.date, "dd.MM.yyyy", provider)));

如果计算机可以为您手动解析字符串,则无需手动解析字符串:

var provider = System.Globalization.CultureInfo.InvariantCulture;
entrys.Sort((a, b) => 
    DateTime.ParseExact(a.date, "dd.MM.yyyy", provider)
        .CompareTo(DateTime.ParseExact(b.date, "dd.MM.yyyy", provider)));

如果计算机可以为您手动解析字符串,则无需手动解析字符串:

var provider = System.Globalization.CultureInfo.InvariantCulture;
entrys.Sort((a, b) => 
    DateTime.ParseExact(a.date, "dd.MM.yyyy", provider)
        .CompareTo(DateTime.ParseExact(b.date, "dd.MM.yyyy", provider)));

只要快速输入这个,想法就是使用Linq OrdeBy并在struct/class上定义一个get属性来返回解析的
DateTime
。您可以使用
TryPraseExact
以增加安全性

void Main()
{
var list = new List<Entity>{
    new Entity{TempDate = "25.10.2015", SomeData="data1"},
    new Entity{TempDate = "20.10.2015", SomeData="data2"},
    new Entity{TempDate = "26.10.2015", SomeData="data3"},
    new Entity{TempDate = "18.10.2015", SomeData="data4"}};

list.Dump("Original");

list.OrderBy(x => x.DateTimeParsed).Dump("Sorted");
}

public struct Entity
{
public string TempDate {get; set;}
public DateTime DateTimeParsed{ get{ return DateTime.ParseExact(TempDate, "dd.mm.yyyy",CultureInfo.InvariantCulture); }}

public string SomeData {get; set;}
}
void Main()
{
变量列表=新列表{
新实体{TempDate=“25.10.2015”,SomeData=“data1”},
新实体{TempDate=“20.10.2015”,SomeData=“data2”},
新实体{TempDate=“26.10.2015”,SomeData=“data3”},
新实体{TempDate=“18.10.2015”,SomeData=“data4”};
列表。转储(“原件”);
list.OrderBy(x=>x.DateTimeParsed.Dump(“排序”);
}
公共结构实体
{
公共字符串TempDate{get;set;}
public DateTime DateTimeParsed{get{return DateTime.ParseExact(TempDate,“dd.mm.yyyy”,CultureInfo.InvariantCulture);}
公共字符串SomeData{get;set;}
}

传递
DateTimeOffset
而不是字符串date

也是一个不错的主意。只要快速输入,就可以使用Linq OrdeBy并在结构/类上定义get属性来返回解析后的
DateTime
。您可以使用
TryPraseExact
以增加安全性

void Main()
{
var list = new List<Entity>{
    new Entity{TempDate = "25.10.2015", SomeData="data1"},
    new Entity{TempDate = "20.10.2015", SomeData="data2"},
    new Entity{TempDate = "26.10.2015", SomeData="data3"},
    new Entity{TempDate = "18.10.2015", SomeData="data4"}};

list.Dump("Original");

list.OrderBy(x => x.DateTimeParsed).Dump("Sorted");
}

public struct Entity
{
public string TempDate {get; set;}
public DateTime DateTimeParsed{ get{ return DateTime.ParseExact(TempDate, "dd.mm.yyyy",CultureInfo.InvariantCulture); }}

public string SomeData {get; set;}
}
void Main()
{
变量列表=新列表{
新实体{TempDate=“25.10.2015”,SomeData=“data1”},
新实体{TempDate=“20.10.2015”,SomeData=“data2”},
新实体{TempDate=“26.10.2015”,SomeData=“data3”},
新实体{TempDate=“18.10.2015”,SomeData=“data4”};
列表。转储(“原件”);
list.OrderBy(x=>x.DateTimeParsed.Dump(“排序”);
}
公共结构实体
{
公共字符串TempDate{get;set;}
public DateTime DateTimeParsed{get{return DateTime.ParseExact(TempDate,“dd.mm.yyyy”,CultureInfo.InvariantCulture);}
公共字符串SomeData{get;set;}
}
是肌萎缩侧索硬化