排序日期和时间
我试图编写一个控制台应用程序,根据开始日期按升序排序我的日期和时间,这是我要做的一个例子。
我的意见:
restStart1 = 15/02/12 12.30PM restEnd1 = 15/02/12 01.30PM restStart2 = 15/02/12 11.00AM 打破End2 = 15/02/12 12.00PM restStart3 = 15/02/12 12.00PM restEnd3 = 15/02/12 01.00PM
我期待我的输出应该像:
restStart1 = 15/02/12 11.00AM restEnd1 = 15/02/12 12.00PM restStart2 = 15/02/12 12.00PM restEnd2 = 15/02/12 01.00PM restStart3 = 15/02/12 12.30PM restEnd3 = 15/02/12 01.30PM
请建议我解决这个问题的最佳方法?
我建议您要配对原始的开始值和结束值,然后仅按开始日期对其进行排序。
首先,您必须配对Start
和End
。 例如上课:
public class Break { public DateTime Start { get; set; } public DateTime End { get; set; } }
然后,当您填充此类对象的集合时,只需通过LINQ Start
对其进行排序。
var breaks = new List() { new Break() { Start = new DateTime(2012,2,15,12,30,0), End = new DateTime(2012,2,15,13,30,0) ... /// etc. } }; var ordered = breaks.OrderBy(s => s.Start); foreach (var ord in ordered) { System.Console.WriteLine(ord.Start); System.Console.WriteLine(ord.End); }
编辑
要创建配对的datetimes对象,您可以使用以下方法:
public static Break ConvertToBreak(string startDate, string endDate, object gmtOffset) { var dtStart = UnixTimeConverter(startDate, System.Convert.ToDecimal(gmtOffset)); var dtEnd = UnixTimeConverter(endDate, System.Convert.ToDecimal(gmtOffset)); return new Break{Start = dtStart, End = dtEnd}; }
您可以将所有DateTime放在数组或List中,并使用标准方法对数组或列表进行排序,请参阅此处以获取示例: http : //www.csharp-examples.net/sort-array
在.NET中, DateTime实现了IComparable
接口,因此很容易比较/排序这些变量。
这么说,你可以有两个数组或一个矩阵,并分别对每个数组进行排序,因为从你的例子看起来你从start列获取一个值,从en列获取一个值等…
好像你只想对日期/时间对象进行排序。 由于你发布的代码不是C#,我会做一些假设。
首先:假设您在DateTime
对象中有日期/时间组合。 我假设你有一份清单。
List dateTimes = new List (); dateTimes.AddRange(new [] { new DateTime(2012, 02, 15, 12, 30, 00), // 15/02/12 12.30PM new DateTime(2012, 02, 15, 13, 30, 00), // 15/02/12 01.30PM new DateTime(2012, 02, 15, 11, 00, 00), // 15/02/12 11.00AM new DateTime(2012, 02, 15, 12, 00, 00), // 15/02/12 12.00PM new DateTime(2012, 02, 15, 12, 00, 00), // 15/02/12 12.00PM new DateTime(2012, 02, 15, 01, 00, 00), // 15/02/12 01.00PM });
您可以像这样对它们进行就地排序:
dateTimes.Sort();
或者,如果你有一个数组或任何IEnumerable
,你可以获得一个新的可枚举序列:
IEnumerable dateTimes = new [] { new DateTime(2012, 02, 15, 12, 30, 00), // 15/02/12 12.30PM new DateTime(2012, 02, 15, 13, 30, 00), // 15/02/12 01.30PM new DateTime(2012, 02, 15, 11, 00, 00), // 15/02/12 11.00AM new DateTime(2012, 02, 15, 12, 00, 00), // 15/02/12 12.00PM new DateTime(2012, 02, 15, 12, 00, 00), // 15/02/12 12.00PM new DateTime(2012, 02, 15, 01, 00, 00), // 15/02/12 01.00PM }; var orderedDateTimes = dateTimes.OrderBy(dt => dt);
我就是这样做的
我不知道你对它们的发送方式有什么具体要求,或者如果结束时间总是超过开始时间1小时,这个例子简单地说明了如何对它们进行相应的排序。
//GetYourInputValues() refers to however you plans on pulling in these inputs. //It wasn't made clear in your post how you planned to do that. string[] inputValues = GetYourInputValues(); //List that we will build, then sort, then print out. List sortedDateTime = new List (); //Parse them into DateTime variables foreach(var input in inputValues) { DateTime inputDate; if(DateTime.TryParse(input, inputDate)) sortedDateTime.Add(inputDate); } //Sort them ascending (for descending, flip a and b values) sortedDateTime.Sort((a, b) => a.CompareTo(b)); //Print out the newly sorted values to console. foreach(DateTime dt in sortedDateTime) { Console.WriteLine(dt.ToString("MM/dd/yy hh:mm:ss tt")): }
注意:如果您应该将每个开始/结束视为一对(以便它们始终在一起),那么您将不得不做一些小的更改(请参阅@ mipe34答案)。 否则,这是一个完整的工作示例:
上述就是C#学习教程:排序日期和时间分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
static void Main(string[] args) { string text = @"break Start1 = 15/02/12 12.30PM break End1= 15/02/12 01.30PM break Start2 = 15/02/12 11.00AM break End2= 15/02/12 12.00PM break Start3 = 15/02/12 12.00PM break End3= 15/02/12 01.00PM"; string[] splitted = text.Split(new string[] {"n", "r"}, StringSplitOptions.RemoveEmptyEntries); IList starts = new List (); IList ends = new List (); for (int i = 0; i < splitted.Length; i++) { string line = splitted[i].Trim(); string date = line.Split('=')[1].Trim(); DateTime d = DateTime.ParseExact(date, "dd/MM/yy hh.mmtt", null); if (line.StartsWith("break Start")) { starts.Add(d); } else { ends.Add(d); } } starts = starts.OrderBy(x => x).ToList(); ends = ends.OrderBy(x => x).ToList(); for (int i = 0; i < starts.Count; i++) { Console.WriteLine("break Start{0} = {1}", i + 1, starts[i].ToString("dd/MM/yy hh.mmtt")); Console.WriteLine("break End{0} = {1}", i + 1, ends[i].ToString("dd/MM/yy hh.mmtt")); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1290550.html