using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.Model.Monitor
{
///
/// 周段
///
public class WeekSlot : JsonModel, ICronSlot
{
///
/// 是否从前一周开始
///
public bool Pre { get; set; } = false;
///
/// 开始天数 周一到周日 1-7
///
public int Start { get; set; } = 1;
///
/// 结束天数 周一到周日 1-7
///
public int End { get; set; } = 7;
///
/// 验证
///
public bool Verify()
{
if (this.Start < 1 || this.Start > 7)
return false;
if (this.End < 1 || this.End > 7)
return false;
var start = this.Start;
var end = this.End;
if (this.Pre)
{
end += 7;
}
if (end - start > 6)
return false;
if (end - start < 1)
return false;
return true;
}
///
/// 获取开始时间
///
public DateTime GetStartTime(DateTime rhs)
{
var start = 1;
if (Verify())
{
start = this.Start;
if (Pre)
start = start - 7;
}
var dayOfWeek = (int)rhs.DayOfWeek;
if (dayOfWeek == 0)
dayOfWeek = 7;
var startWeek = rhs.AddDays(1 - dayOfWeek);
var dt = startWeek.AddDays(-1);
dt = dt.AddDays(-7);
dt = dt.Date;
dt = dt.AddDays(start);
return dt;
}
///
/// 获取结束时间
///
public DateTime GetEndTime(DateTime rhs)
{
var end = 7;
if (Verify())
end = this.End;
var dayOfWeek = (int)rhs.DayOfWeek;
if (dayOfWeek == 0)
dayOfWeek = 7;
var startWeek = rhs.AddDays(1 - dayOfWeek);
var dt = startWeek.Date;
dt = dt.AddDays(-7);
dt = dt.AddDays(end);
return dt;
}
}
}