从Date提取DateTime以获取DateTime

时间:2017-12-06 06:36:49

标签: c# date datetime

我拥有的是什么;

  1. 周末日期列表,格式为11/4/2017 12:00:00 AM
  2. 迟到的日期时间列表,格式为11/4/2017 02:40:03 PM
  3. 我试图将所有周末排除在已故的时间之外,所以我有一个列表,其中包含所有日期和时间(没有周末日期),因为我需要时间。

    for weekendDates:

    // Build list of weekdates and weekend dates
                List<DateTime> weekDates = new List<DateTime>();
                List<DateTime> weekendDates = new List<DateTime>();
                int days = (EndDate - StartDate).Days;
                for (int i = 0; i < days; i++)
                {
                    DateTime date = StartDate.AddDays(i);
                    if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
                    {
                        weekendDates.Add(date);
                        continue;
                    }
                    weekDates.Add(date);
                }
    

    迟到的名单:

    var fetchAllrec = (from m in db.D2L
                                where m.RId == ENum && m.Date >= StartDate && m.Date <= EndDate
                                select m).Distinct();
    
                var onerecord = fetchAllrec
                        .GroupBy(dt => dt.Date)
                        .Select(z => z.OrderBy(y => y.Date).FirstOrDefault())
                        .ToList();
    
    //All the dates he was late compared to his AT
                var late = (from d in onerecord
                            where d.DateTime.Value.Hour >= ArT
                            select d).ToList();
    

    WithoutWeekends:

    //All the late dates without weekends
                IEnumerable<DateTime> lateDateTimeList = late.Select(m => m.DateTime.Value).ToList(); 
                //^^^Change this to m.Date to get the 'latDateTimeList' dates without weekends but then it wont calculate
                //the minutes since it will have all the Dates in the 'lateDateTimeList' ONLY!
                IEnumerable<DateTime> lateDateTimeWithoutWeekendsList =  lateDateTimeList.Except(weekendDates).ToList();
    
    
                //get latecoming DateTimes list here
                var lateComings = new List<DateTime>();
    
    
                foreach (var g in lateDateTimeWithoutWeekendsList)      
                {
                    lateComings.Add(g);    // IT MUST HAVE DATE TIME HERE NOT JUST DATE
                }
    
    
                countLates = lateComings.Count();
    
               //list of time differences 
                var timeDiff = new List<TimeSpan>();
    
                foreach (DateTime ts in lateComings)
                {
    
                    if (ts.TimeOfDay > TimeSpan.FromHours(AT))
                    {
                        timeDiff.Add(ts.TimeOfDay - TimeSpan.FromHours(AT));
                    }
                }
     //fetching the minutes from the above list
    
    
                var minutesList = timeDiff.Select(t => Convert.ToInt32(t.TotalMinutes)).ToList();
    

    上述代码的作用是它不排除weekendDates,即此部分提供完整列表,包括weekendDates,即lateDateTimeList中的列表

    IEnumerable<DateTime> lateDateTimeWithoutWeekendsList = lateDateTimeList.Except(weekendDates).ToList();
    

    输出:

    11/2/2017 10:53:00 AM
    11/3/2017 11:10:03 AM
    11/4/2017 01:12:13 PM
    11/5/2017 12:11:10 PM
    

    但如果我改变了;

    IEnumerable<DateTime> lateDateTimeList = late.Select(m => m.DateTime.Value).ToList(); 
    

    IEnumerable<DateTime> lateDateTimeList = late.Select(m => m.Date.Value).ToList(); 
    

    它给了我所有日期,没有时间。

    输出:

    11/2/2017 12:00:00 AM
    11/3/2017 12:00:00 AM
    

2 个答案:

答案 0 :(得分:1)

怎么样:

static void Main(string[] args)
{

    Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

    List<DateTime> dates = new List<DateTime>();

    for(int i = 1; i <= 50; i++)
    {
        DateTime date = DateTime.Now.AddDays(i);
        dates.Add(date);
        Trace.WriteLine(date.ToString("dd.MM.yyyy HH:mm:ss dddd"));
    }

    List<DateTime> filteredDates = dates.Where(date => 
                                               !(date.DayOfWeek == DayOfWeek.Saturday ||
                                                 date.DayOfWeek == DayOfWeek.Sunday))
                                        .ToList();

    Trace.WriteLine("------NO-WEEKENDS----------");

    filteredDates.ForEach(date => Trace.WriteLine(date.ToString("dd.MM.yyyy HH:mm:ss dddd")));

    Console.ReadKey();
}

使用Linq Enumerable.Where

输出:

07.12.2017 08:40:32 Thursday
08.12.2017 08:40:32 Friday
09.12.2017 08:40:32 Saturday
10.12.2017 08:40:32 Sunday
11.12.2017 08:40:32 Monday
12.12.2017 08:40:32 Tuesday
13.12.2017 08:40:32 Wednesday
14.12.2017 08:40:32 Thursday
15.12.2017 08:40:32 Friday
16.12.2017 08:40:32 Saturday
17.12.2017 08:40:32 Sunday
18.12.2017 08:40:32 Monday
19.12.2017 08:40:32 Tuesday
20.12.2017 08:40:32 Wednesday
21.12.2017 08:40:32 Thursday
22.12.2017 08:40:32 Friday
23.12.2017 08:40:32 Saturday
24.12.2017 08:40:32 Sunday
25.12.2017 08:40:32 Monday
26.12.2017 08:40:32 Tuesday
27.12.2017 08:40:32 Wednesday
28.12.2017 08:40:32 Thursday
29.12.2017 08:40:32 Friday
30.12.2017 08:40:32 Saturday
31.12.2017 08:40:32 Sunday
01.01.2018 08:40:32 Monday
02.01.2018 08:40:32 Tuesday
03.01.2018 08:40:32 Wednesday
04.01.2018 08:40:32 Thursday
05.01.2018 08:40:32 Friday
06.01.2018 08:40:32 Saturday
07.01.2018 08:40:32 Sunday
08.01.2018 08:40:32 Monday
09.01.2018 08:40:32 Tuesday
10.01.2018 08:40:32 Wednesday
11.01.2018 08:40:32 Thursday
12.01.2018 08:40:32 Friday
13.01.2018 08:40:32 Saturday
14.01.2018 08:40:32 Sunday
15.01.2018 08:40:32 Monday
16.01.2018 08:40:32 Tuesday
17.01.2018 08:40:32 Wednesday
18.01.2018 08:40:32 Thursday
19.01.2018 08:40:32 Friday
20.01.2018 08:40:32 Saturday
21.01.2018 08:40:32 Sunday
22.01.2018 08:40:32 Monday
23.01.2018 08:40:32 Tuesday
24.01.2018 08:40:32 Wednesday
25.01.2018 08:40:32 Thursday

------NO-WEEKENDS----------

07.12.2017 08:40:32 Thursday
08.12.2017 08:40:32 Friday
11.12.2017 08:40:32 Monday
12.12.2017 08:40:32 Tuesday
13.12.2017 08:40:32 Wednesday
14.12.2017 08:40:32 Thursday
15.12.2017 08:40:32 Friday
18.12.2017 08:40:32 Monday
19.12.2017 08:40:32 Tuesday
20.12.2017 08:40:32 Wednesday
21.12.2017 08:40:32 Thursday
22.12.2017 08:40:32 Friday
25.12.2017 08:40:32 Monday
26.12.2017 08:40:32 Tuesday
27.12.2017 08:40:32 Wednesday
28.12.2017 08:40:32 Thursday
29.12.2017 08:40:32 Friday
01.01.2018 08:40:32 Monday
02.01.2018 08:40:32 Tuesday
03.01.2018 08:40:32 Wednesday
04.01.2018 08:40:32 Thursday
05.01.2018 08:40:32 Friday
08.01.2018 08:40:32 Monday
09.01.2018 08:40:32 Tuesday
10.01.2018 08:40:32 Wednesday
11.01.2018 08:40:32 Thursday
12.01.2018 08:40:32 Friday
15.01.2018 08:40:32 Monday
16.01.2018 08:40:32 Tuesday
17.01.2018 08:40:32 Wednesday
18.01.2018 08:40:32 Thursday
19.01.2018 08:40:32 Friday
22.01.2018 08:40:32 Monday
23.01.2018 08:40:32 Tuesday
24.01.2018 08:40:32 Wednesday
25.01.2018 08:40:32 Thursday

答案 1 :(得分:0)

  using System;
  using System.Collections.Generic;
  using System.Linq;

  static class DateTimeExtension
  {
    public static bool IsWeekend (this DateTime dt) 
        => dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday;

    public static Func<DateTime, bool> IsWeekend_2 = 
        dt => dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday;    
  }

  class Program
  {
    Func<DateTime, bool> IsWeekend = dt => dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday;

    static void PrintDates (IList<DateTime> dts) => Console.WriteLine (string.Join ("", dts.Select (item => item.ToString () + "      Weekend: " + (item.IsWeekend () ? "Yes" : "No") + "\n"))) ;
    static Random r = new Random ();
    static void Main (string[] args)
    {
      // Data
      var dates = new List<DateTime> ();
      Enumerable.Range (0, 50)
          .ToList ()
          .ForEach (n => dates.Add (DateTime.Now.AddDays (n).AddHours(r.NextDouble() * 12)));

      // no weekends
      var datesWithoutWeekends = dates.Where (myDate => !myDate.IsWeekend ()).ToList ();

      // also no weekends
      var datesWithoutWeekends_2 = dates.Where (myDate => !DateTimeExtension.IsWeekend_2 (myDate)).ToList ();

      // still no weekends
      var datesWithoutWeekends_3 = dates.Where (myDate =>myDate.DayOfWeek != DayOfWeek.Sunday && myDate.DayOfWeek == DayOfWeek.Saturday).ToList ();


      PrintDates (dates);
      Console.WriteLine ();
      PrintDates (datesWithoutWeekends);
      Console.ReadLine ();
    }
  }

只需轻松过滤周末 - f.e.使用扩展 - 或谓词(不使用Predicase,使用Func - 它们是相同的,但Func是func'ier)或内联。

使用DateTime Customn Format

格式化输出

输出(德语默认语言环境dd.mm.YYYY):

06.12.2017 16:40:13      Weekend: No
07.12.2017 15:06:42      Weekend: No
08.12.2017 12:09:55      Weekend: No
09.12.2017 10:19:20      Weekend: Yes
10.12.2017 19:51:28      Weekend: Yes
11.12.2017 12:18:26      Weekend: No
15.12.2017 17:11:18      Weekend: No
16.12.2017 15:45:32      Weekend: Yes
17.12.2017 11:39:25      Weekend: Yes
18.12.2017 17:34:05      Weekend: No
19.12.2017 16:25:51      Weekend: No
20.12.2017 12:11:49      Weekend: No
21.12.2017 16:37:07      Weekend: No
22.12.2017 17:56:36      Weekend: No
23.12.2017 08:37:13      Weekend: Yes
24.12.2017 09:22:52      Weekend: Yes
25.12.2017 20:01:19      Weekend: No
26.12.2017 13:24:30      Weekend: No


06.12.2017 16:40:13      Weekend: No
07.12.2017 15:06:42      Weekend: No
08.12.2017 12:09:55      Weekend: No
11.12.2017 12:18:26      Weekend: No
12.12.2017 20:00:09      Weekend: No
13.12.2017 20:12:48      Weekend: No
14.12.2017 17:03:31      Weekend: No
15.12.2017 17:11:18      Weekend: No
18.12.2017 17:34:05      Weekend: No
19.12.2017 16:25:51      Weekend: No
20.12.2017 12:11:49      Weekend: No
21.12.2017 16:37:07      Weekend: No
22.12.2017 17:56:36      Weekend: No
25.12.2017 20:01:19      Weekend: No
26.12.2017 13:24:30      Weekend: No