111,129
社区成员
发帖
与我相关
我的任务
分享
static void Main(string[] args)
{
string[] times = new string[] { "9:05", "12:35", "13:15", "16:30" };
string worktime = "9:00-12:00 13:00-17:00";
if (times.Length % 2 != 0)
throw new Exception("时间必须成对");
List<DateTime> ts = new List<DateTime>();
Array.ForEach(times, delegate(string s) { ts.Add(DateTime.Parse(s)); });
List<DateTime> wt = new List<DateTime>();
Array.ForEach(worktime.Split(' ', '-'), delegate(string s) { wt.Add(DateTime.Parse(s)); });
ts.Add(DateTime.Now.Date.AddDays(1));
wt.ForEach(delegate(DateTime t)
{
ts.InsertRange(ts.FindIndex(delegate(DateTime t1) { return t1 >= t; }), new DateTime[] { t, t });
});
int i = 0;
int am1 = ts.FindIndex(delegate(DateTime t) { return i++ % 2 == 1 && t >= wt[0]; });
int am2 = ts.FindLastIndex(delegate(DateTime t) { return t <= wt[1]; });
i = 0;
int pm1 = ts.FindIndex(delegate(DateTime t) { return i++ % 2 == 1 && t >= wt[2]; });
int pm2 = ts.FindLastIndex(delegate(DateTime t) { return t <= wt[3]; });
long ticks = 0;
i = 0;
ts.GetRange(am1, am2 - am1).ForEach(delegate(DateTime t) { ticks += i % 2 == 1 ? (t - ts[am1 + i - 1]).Ticks : 0; i++; });
i = 0;
ts.GetRange(pm1, pm2 - pm1).ForEach(delegate(DateTime t) { ticks += i % 2 == 1 ? (t-ts[pm1 + i - 1]).Ticks : 0; i++; });
TimeSpan r = new TimeSpan(ticks);
Console.WriteLine("共请假" + r.TotalMinutes + "分钟");
}
static void Main(string[] args)
{
var times = new string[] { "9:05", "12:35", "13:15", "16:30" };
string worktime = "9:00-12:00 13:00-17:00";
if (times.Length % 2 != 0)
throw new Exception("时间必须成对");
var ts = times.Select(s => DateTime.Parse(s)).ToList();
var wt = worktime.Split(' ', '-').Select(s => DateTime.Parse(s)).ToList();
ts.Add(DateTime.Now.Date.AddDays(1));
wt.ForEach(t => ts.InsertRange(ts.FindIndex(t1 => t1 >= t), new DateTime[] { t, t }));
var t_am = ts.SkipWhile((t, i) => t < wt[0] || i % 2 == 0).TakeWhile(t => t <= wt[1]).ToList();
var t_pm = ts.SkipWhile((t, i) => t < wt[2] || i % 2 == 0).TakeWhile(t => t <= wt[3]).ToList();
var r = t_am.Select((t, i) => i % 2 == 1 ? (t - t_am[i - 1]).Ticks : 0).Sum() +
t_pm.Select((t, i) => i % 2 == 1 ? (t - t_pm[i - 1]).Ticks : 0).Sum();
Console.WriteLine("共请假" + new TimeSpan(r).TotalMinutes + "分钟");
}