using System.Collections.Generic;
var morning = new Shift();
morning.Start = new TimeSpan(8, 0, 0);
morning.End = new TimeSpan(17, 0, 0);
night.Start = new TimeSpan(17, 0, 0);
night.End = new TimeSpan(1, 0, 0, 0);
var graveyard = new Shift();
graveyard.Start = new TimeSpan(1, 0, 0, 0);
graveyard.End = new TimeSpan(1, 7, 0, 0);
Console.WriteLine (morning.Name);
Console.WriteLine (morning.StartStr);
Console.WriteLine (morning.EndStr);
Console.WriteLine (night.Name);
Console.WriteLine (night.StartStr);
Console.WriteLine (night.EndStr);
Console.WriteLine (graveyard.Name);
Console.WriteLine (graveyard.StartStr);
Console.WriteLine (graveyard.EndStr);
List<Shift> shift_list = new List<Shift>();
shift_list.Add(graveyard);
Console.WriteLine (shift_list.Count());
Shift current_shift = null;
var now = new DateTime(2023, 4, 15, 01, 18, 00);
foreach (var shift in shift_list)
var start = DateTime.Today.Add(shift.Start);
var end = DateTime.Today.Add(shift.End);
if (start <= now && now <= end)
start = DateTime.Today.AddDays(-1).Add(shift.Start);
end = DateTime.Today.AddDays(-1).Add(shift.End);
if (start <= now && now <= end)
if (current_shift == null)
Console.WriteLine($"current_shift: null");
Console.WriteLine($"current_shift: {current_shift.Name}");
Shift prev_shift = shift_list.First();
if (shift_list.Count == 1)
Console.WriteLine($"ct: {shift_list.Where(x => x.End < current_shift.End).Count()}");
prev_shift = shift_list.Where(x => x.End < current_shift.End).OrderByDescending(x => x.End).First();
foreach (var shift in shift_list)
var end = DateTime.Today.Add(shift.End);
if (now > end && end < DateTime.Today.Add(prev_shift.End))
foreach (var shift in shift_list)
var end = DateTime.Today.AddDays(-1).Add(shift.End);
if (now > end && end < DateTime.Today.AddDays(-1).Add(prev_shift.End))
Console.WriteLine($"prev_shift: {prev_shift.Name}");
public int SN { get; set; }
public string Name { get; set; }
public TimeSpan Start { get; set; }
public TimeSpan End { get; set; }
get => $"{Start.Hours:00}:{Start.Minutes:00}:{Start.Seconds:00}";
var result = $"{End.Hours:00}:{End.Minutes:00}:{End.Seconds:00}";
if (End == new TimeSpan(1, 0, 0, 0))
result = End.Days + "日後" + result;