namespace customTypes
|
{
|
/// <summary>
|
/// gRPC送信用Date
|
/// SqlServerのDate型対応
|
/// </summary>
|
public partial class Date
|
{
|
public static readonly int MinValue = 10000101;
|
public static readonly DateTime MinDate = DateTime.Parse("1000/01/01");
|
public static readonly Date Default = new Date(0);
|
|
/// <summary>
|
/// 利用情報のプライマリーキー:1901/01/01
|
/// </summary>
|
public static readonly Date MinUseDate = new Date(19010101);
|
|
public Date(int val)
|
{
|
Value = val;
|
}
|
|
public Date(string val)
|
{
|
Value = int.Parse(val.Replace("/", string.Empty).Replace("-", string.Empty));
|
}
|
|
/// <summary>
|
/// 暗然変換
|
/// DateTime = Date
|
/// </summary>
|
/// <param name="grpcDecimal"></param>
|
public static implicit operator DateTime(Date grpcDate)
|
{
|
try
|
{
|
if (grpcDate.Value <= MinValue) { return MinDate; }
|
string date = grpcDate.Value.ToString();
|
int year = System.Convert.ToInt32(date.Substring(0, 4));
|
int mon = System.Convert.ToInt32(date.Substring(4, 2));
|
int day = System.Convert.ToInt32(date.Substring(6, 2));
|
return new DateTime(year, mon, day);
|
}
|
catch
|
{
|
return MinDate;
|
}
|
}
|
|
/// <summary>
|
/// 暗然変換
|
/// Date = DateTime
|
/// </summary>
|
/// <param name="value"></param>
|
public static implicit operator Date(DateTime value)
|
{
|
return new Date(int.Parse(value.ToString("yyyyMMdd")));
|
}
|
|
/// <summary>
|
/// 比較
|
/// </summary>
|
/// <param name="val"></param>
|
/// <returns></returns>
|
public int CompareTo(Date val)
|
{
|
DateTime self = this;
|
DateTime inVal = val;
|
return self.CompareTo(inVal);
|
}
|
|
/// <summary>
|
/// c#基本型の値を返す
|
/// </summary>
|
/// <returns></returns>
|
public DateTime ToDateTime()
|
{
|
DateTime self = this;
|
return self;
|
}
|
|
/// <summary>
|
/// 文字列
|
/// </summary>
|
/// <returns></returns>
|
public string ToText(string format = "yyyy/MM/dd")
|
{
|
DateTime self = this;
|
if (format.Length > 0) { return self.ToString(format); }
|
return self.ToString();
|
}
|
|
/// <summary>
|
/// SQL文の値セット
|
/// </summary>
|
/// <returns></returns>
|
public string ToSqlValue()
|
{
|
DateTime self = this;
|
return Value <= MinValue || self.CompareTo(MinDate) <= 0 ? "NULL" : $"'{self.ToString("yyyy/MM/dd")}'";
|
}
|
|
/// <summary>
|
/// 日付の±
|
/// </summary>
|
/// <param name="day"></param>
|
/// <returns></returns>
|
public Date Add(int day)
|
{
|
DateTime self = this;
|
Date date = self.AddDays((double)day);
|
return date;
|
}
|
|
/// <summary>
|
/// 日付引く
|
/// </summary>
|
/// <param name="beginDate"></param>
|
/// <returns></returns>
|
public int Subtract(Date beginDate)
|
{
|
DateTime end = this;
|
DateTime begin = beginDate;
|
TimeSpan ts = end - begin;
|
return ts.Days;
|
}
|
}
|
}
|