1 #Region "Microsoft.VisualBasic::18ce99495d4d72e04628b639362c2840, Microsoft.VisualBasic.Core\Extensions\ValueTypes\DateTimeHelper.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Module DateTimeHelper
35     
36     '         Properties: MonthList
37     
38     '         Constructor: (+1 OverloadsSub New
39     '         FunctionDateSeq, FillDateZero, GetMonthInteger, UnixTimeStamp, YYMMDD
40     
41     
42     ' /********************************************************************************/
43
44 #End Region
45
46 Imports System.Runtime.CompilerServices
47
48 Namespace ValueTypes
49
50     Public Module DateTimeHelper
51
52         ''' <summary>
53         ''' List of month names and its <see cref="Integer"/> value in a year
54         ''' </summary>
55         ''' <returns></returns>
56         Public ReadOnly Property MonthList As Dictionary(Of StringInteger)
57
58         Sub New()
59             MonthList = New Dictionary(Of StringInteger)
60
61             MonthList.Add("January", 1)
62             MonthList.Add("Jan", 1)
63
64             MonthList.Add("February", 2)
65             MonthList.Add("Feb", 2)
66
67             MonthList.Add("March", 3)
68             MonthList.Add("Mar", 3)
69
70             MonthList.Add("April", 4)
71             MonthList.Add("Apr", 4)
72
73             MonthList.Add("May", 5)
74
75             MonthList.Add("June", 6)
76             MonthList.Add("Jun", 6)
77
78             MonthList.Add("July", 7)
79             MonthList.Add("Jul", 7)
80
81             MonthList.Add("August", 8)
82             MonthList.Add("Aug", 8)
83
84             MonthList.Add("September", 9)
85             MonthList.Add("Sep", 9)
86
87             MonthList.Add("October", 10)
88             MonthList.Add("Oct", 10)
89
90             MonthList.Add("November", 11)
91             MonthList.Add("Nov", 11)
92
93             MonthList.Add("December", 12)
94             MonthList.Add("Dec", 12)
95         End Sub
96
97         ''' <summary>
98         ''' 从全称或者简称解析出月份的数字
99         ''' </summary>
100         ''' <param name="mon">大小写不敏感</param>
101         ''' <returns></returns>
102         Public Function GetMonthInteger(mon As StringAs Integer
103             If Not MonthList.ContainsKey(mon) Then
104                 For Each k As String In MonthList.Keys
105                     If String.Equals(mon, k, StringComparison.OrdinalIgnoreCase) Then
106                         Return MonthList(k)
107                     End If
108                 Next
109
110                 Return -1
111             Else
112                 Return MonthList(mon)
113             End If
114         End Function
115
116         ''' <summary>
117         ''' 00
118         ''' </summary>
119         ''' <param name="d"></param>
120         ''' <returns></returns>
121         ''' 
122         <MethodImpl(MethodImplOptions.AggressiveInlining)>
123         Public Function FillDateZero(d As IntegerAs String
124             Return If(d >= 10, d, "0" & d)
125         End Function
126
127         ''' <summary>
128         ''' 枚举出在<paramref name="start"/>到<paramref name="ends"/>这个时间窗里面的所有日期,单位为天
129         ''' </summary>
130         ''' <param name="start"></param>
131         ''' <param name="ends"></param>
132         ''' <returns>返回值里面包含有起始和结束的日期</returns>
133         Public Iterator Function DateSeq(start As Date, ends As DateAs IEnumerable(Of Date)
134             Do While start <= ends
135                 ' Yield $"{start.Year}-{If(start.Month < 10, "0" & start.Month, start.Month)}-{If(start.Day < 10, "0" & start.Day, start.Day)}"
136                 Yield start
137                 start = start.AddDays(1)
138             Loop
139         End Function
140
141         ''' <summary>
142         ''' yyyy-mm-dd
143         ''' </summary>
144         ''' <param name="x"></param>
145         ''' <returns></returns>
146         <Extension>
147         Public Function YYMMDD(x As DateAs String
148             Dim mm$ = If(x.Month < 10, "0" & x.Month, x.Month)
149             Dim dd$ = If(x.Day < 10, "0" & x.Day, x.Day)
150             Return $"{x.Year}-{mm}-{dd}"
151         End Function
152
153         ''' <summary>
154         ''' Convert <see cref="DateTime"/> to unix time stamp
155         ''' </summary>
156         ''' <param name="time"></param>
157         ''' <returns></returns>
158         <MethodImpl(MethodImplOptions.AggressiveInlining)>
159         <Extension>
160         Public Function UnixTimeStamp(time As DateTime) As Long
161             Return (time.ToUniversalTime - New DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds
162         End Function
163     End Module
164 End Namespace