ホテル管理システム
ogi
yesterday 1a1c8e71fcd14858f595029f089b2d4a00202b32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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;
        }
    }
}