3.日付・時刻に関するワンポイントテクニック集(30_Day_03) (旧、SampleNo.079 / 080) |
下記プログラムコードに関する補足・注意事項 動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86 Option :[Compare Text] [Explicit On] [Infer On] [Strict On] Imports :sysDT = System.DateTime / System.Globalization 参照設定:追加なし その他 :下記の1行を Form1_Load イベント内に記入しておいて下さい。(コントロールパネルの地域の日付け形式に影響されないように) :System.Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("ja") このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので) 必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい) |
1.現在の日付を取得する |
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '現在の日付を取得する TextBox1.Text = "現在の日付を取得する" & vbCrLf TextBox1.Text &= String.Format("System.DateTime.Today = {0}", System.DateTime.Today) & vbCrLf '以下、Imports sysDT = System.DateTime を宣言して、下記のように省略します。 TextBox1.Text &= String.Format("sysDT.Today = {0}", sysDT.Today) & vbCrLf '名前空間 : Microsoft.VisualBasic の機能でも同様に取得できますが、以後の紹介は省略します。 TextBox1.Text &= String.Format("Microsoft.VisualBasic.Today = {0}", Microsoft.VisualBasic.Today) & vbCrLf '上記実行結果 'System.DateTime.Today = 2014/05/09 00:00:00 'sysDT.Today = 2014/05/09 00:00:00 'Microsoft.VisualBasic.Today = 2014/05/09 00:00:00 End Sub |
2.現在の日付と時刻を取得する |
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '現在の日付と時刻を取得する TextBox1.Text = "現在の日付と時刻を取得する" & vbCrLf TextBox1.Text &= String.Format("sysDT.Now = {0}", sysDT.Now) & vbCrLf '上記実行結果 'sysDT.Now = 2014/05/09 09:57:24 End Sub |
3.現在の時刻を取得する |
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click '現在の時刻を取得する TextBox1.Text = "現在の時刻を取得する" & vbCrLf Dim dt As System.DateTime = sysDT.Now TextBox1.Text &= String.Format("dt = sysDT.Now = {0}", dt) & vbCrLf '現在の時刻を取得する TextBox1.Text &= String.Format("dt.TimeOfDay = {0}", dt.TimeOfDay) & vbCrLf '現在の時刻を長い形式の時刻で取得する TextBox1.Text &= String.Format("dt.ToLongTimeString = {0}", dt.ToLongTimeString) & vbCrLf '上記実行結果 'dt = sysDT.Now = 2014/05/09 09:58:00 'dt.TimeOfDay = 09:58:00.4180390 'dt.ToLongTimeString = 09:58:00 End Sub |
4.指定日の曜日を取得する |
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click '指定日の曜日を取得する TextBox1.Text = "指定日の曜日を取得する" & vbCrLf Dim dt As System.DateTime = sysDT.Now TextBox1.Text &= String.Format("dt = sysDT.Now = {0}", dt) & vbCrLf TextBox1.Text &= String.Format("dt.DayOfWeek = {0}", dt.DayOfWeek) & vbCrLf TextBox1.Text &= String.Format("dt.ToString(""dddd"") = {0}", dt.ToString("dddd")) & vbCrLf '上記実行結果 'dt = sysDT.Now = 2014/05/09 09:58:33 'dt.DayOfWeek = Friday 'dt.ToString("dddd") = 金曜日 End Sub |
5.指定年月の末日を取得する |
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click '指定年月の末日を取得する TextBox1.Text = "指定年月の末日を取得する" & vbCrLf Dim dt As System.DateTime = sysDT.Parse("2014/05/09") ' System.DateTime.Now TextBox1.Text &= String.Format("sysDT.DaysInMonth(dt.Year, dt.Month) = {0}", sysDT.DaysInMonth(dt.Year, dt.Month)) '上記実行結果 'sysDT.DaysInMonth(dt.Year, dt.Month) = 31 End Sub |
6.指定年がうるう年かを判定する |
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click '指定年がうるう年かを判定する TextBox1.Text = "指定年がうるう年かを判定する" & vbCrLf TextBox1.Text &= String.Format("IIf(sysDT.IsLeapYear(2014), ""うるう年"", ""うるう年でない"") = {0}", _ IIf(sysDT.IsLeapYear(2014), "うるう年", "うるう年でない")) & vbCrLf TextBox1.Text &= String.Format("IIf(sysDT.IsLeapYear(2012), ""うるう年"", ""うるう年でない"") = {0}", _ IIf(sysDT.IsLeapYear(2012), "うるう年", "うるう年でない")) & vbCrLf '上記実行結果 'IIf(sysDT.IsLeapYear(2014), "うるう年", "うるう年でない") = うるう年でない 'IIf(sysDT.IsLeapYear(2012), "うるう年", "うるう年でない") = うるう年 End Sub |
7.指定の日付データから年月日を個別に取得する |
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click '指定の日付データから年月日を個別に取得する TextBox1.Text = "指定の日付データから年月日を個別に取得する" & vbCrLf Dim dt As System.DateTime = sysDT.Now TextBox1.Text &= String.Format("dt = sysDT.Now = {0}", dt) & vbCrLf TextBox1.Text &= String.Format("dt.Year = {0}", dt.Year) & vbCrLf TextBox1.Text &= String.Format("dt.Month = {0}", dt.Month) & vbCrLf TextBox1.Text &= String.Format("dt.Day = {0}", dt.Day) & vbCrLf '上記実行結果 'dt = sysDT.Now = 2014/05/09 10:52:31 'dt.Year = 2014 'dt.Month = 5 'dt.Day = 9 End Sub |
8.指定の日付データから時分秒を個別に取得する |
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click '指定の日付データから時分秒を個別に取得する TextBox1.Text = "指定の日付データから時分秒を個別に取得する" & vbCrLf Dim dt As System.DateTime = sysDT.Now TextBox1.Text &= String.Format("dt = sysDT.Now = {0}", dt) & vbCrLf TextBox1.Text &= String.Format("dt.Hour = {0}", dt.Hour) & vbCrLf TextBox1.Text &= String.Format("dt.Minute = {0}", dt.Minute) & vbCrLf TextBox1.Text &= String.Format("dt.Second = {0}", dt.Second) & vbCrLf '上記実行結果 'dt = sysDT.Now = 2014/05/09 10:57:08 'dt.Hour = 10 'dt.Minute = 57 'dt.Second = 8 End Sub |
9.月のデータを1月のように月を含んで取得 |
Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click '月のデータを1月のように月を含んで取得 TextBox1.Text = "月のデータを1月のように月を含んで取得" & vbCrLf Dim dt As System.DateTime = sysDT.Now TextBox1.Text &= String.Format("dt = sysDT.Now = {0}", sysDT.Now) & vbCrLf TextBox1.Text &= String.Format("dt.Month.ToString(""00月"") = {0}", dt.Month.ToString("00月")) & vbCrLf TextBox1.Text &= String.Format("dt.ToString(""MMMM"") = {0}", dt.ToString("MMMM")) & vbCrLf TextBox1.Text &= String.Format("dt.ToString(""MM月"") = {0}", dt.ToString("MM月")) & vbCrLf '上記実行結果 'dt = sysDT.Now = 2014/05/10 16:39:37 'dt.Month.ToString("00月") = 05月 'dt.ToString("MMMM") = 5月 'dt.ToString("MM月") = 05月 End Sub |
10.指定月の第一指定曜日の日付を取得する |
Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click '指定月の第一指定曜日の日付を取得する TextBox1.Text = "指定月の第一指定曜日の日付を取得する" & vbCrLf Dim dt As System.DateTime = CDate("2014/10/01") TextBox1.Text &= String.Format("dt = CDate(""2014/10/01"") = {0}", dt) & vbCrLf TextBox1.Text &= String.Format("第一月曜日 = {0}日", ((9 - (CInt(dt.DayOfWeek) + 1)) Mod 7) + 1) & vbCrLf TextBox1.Text &= String.Format("第二月曜日 = {0}日", ((9 - (CInt(dt.DayOfWeek) + 1)) Mod 7) + 8) & vbCrLf TextBox1.Text &= String.Format("第三月曜日 = {0}日", ((9 - (CInt(dt.DayOfWeek) + 1)) Mod 7) + 15) & vbCrLf TextBox1.Text &= vbCrLf TextBox1.Text &= String.Format("第一日曜日 = {0}日", ((8 - (CInt(dt.DayOfWeek) + 1)) Mod 7) + 1) & vbCrLf TextBox1.Text &= String.Format("第一月曜日 = {0}日", ((9 - (CInt(dt.DayOfWeek) + 1)) Mod 7) + 1) & vbCrLf TextBox1.Text &= String.Format("第一火曜日 = {0}日", ((10 - (CInt(dt.DayOfWeek) + 1)) Mod 7) + 1) & vbCrLf TextBox1.Text &= String.Format("第一水曜日 = {0}日", ((11 - (CInt(dt.DayOfWeek) + 1)) Mod 7) + 1) & vbCrLf TextBox1.Text &= String.Format("第一木曜日 = {0}日", ((12 - (CInt(dt.DayOfWeek) + 1)) Mod 7) + 1) & vbCrLf TextBox1.Text &= String.Format("第一金曜日 = {0}日", ((13 - (CInt(dt.DayOfWeek) + 1)) Mod 7) + 1) & vbCrLf TextBox1.Text &= String.Format("第一土曜日 = {0}日", ((14 - (CInt(dt.DayOfWeek) + 1)) Mod 7) + 1) & vbCrLf '上記実行結果 'dt = CDate("2014/10/01") = 2014/10/01 0:00:00 '第一月曜日 = 6日 '第二月曜日 = 13日 '第三月曜日 = 20日 '第一日曜日 = 5日 '第一月曜日 = 6日 '第一火曜日 = 7日 '第一水曜日 = 1日 '第一木曜日 = 2日 '第一金曜日 = 3日 '第一土曜日 = 4日 End Sub |
11.指定月の指定週の指定曜日は何日かを求める関数の使用例 |
''' <summary> ''' 指定月の指定週の指定曜日は何日かを求める関数 ''' </summary> ''' <param name="MyDate">求める年月日 例、2014/10/01</param> ''' <param name="Week">求める曜日 例、DayOfWeek.Monday </param> ''' <param name="No">求める週 例、2 (第二週)</param> ''' <returns>関数が成功すると、指定の週の指定曜日の日にち ''' 関数が失敗すると、-1 が返ります</returns> Private Function GetFirstWeekDay(ByVal MyDate As DateTime, ByVal Week As DayOfWeek, ByVal No As Integer) As Integer '指定月の指定週の指定曜日は何日かを求める関数 Dim dt As DateTime = DateTime.Parse(MyDate.ToString("yyyy/MM/01")) '第一週の指定曜日の日にちを求める GetFirstWeekDay = (((Week + 8) - (CInt(dt.DayOfWeek) + 1)) Mod 7) + 1 GetFirstWeekDay = GetFirstWeekDay + ((No - 1) * 7) '指定週の日にちを求める '求めた日にちが当月に存在するかをチェック If GetFirstWeekDay < 1 Or GetFirstWeekDay > DateTime.DaysInMonth(MyDate.Year, MyDate.Month) Then GetFirstWeekDay = -1 'エラー End If Return GetFirstWeekDay End Function Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click '指定月の指定週の指定曜日は何日かを求める(当月の第二月曜日は何日かを求める) TextBox1.Text = "指定月の指定週の指定曜日は何日かを求める" & vbCrLf TextBox1.Text &= String.Format("GetFirstWeekDay(Now), DayOfWeek.Monday, 2)= {0}", _ GetFirstWeekDay(Now, DayOfWeek.Monday, 2)) & vbCrLf '上記実行結果 'GetFirstWeekDay(Now), DayOfWeek.Monday, 2)= 12 End Sub |
12.今年のクリスマスイブは何曜日? |
Private Sub Button13_Click(sender As Object, e As EventArgs) Handles Button13.Click '今年のクリスマスイブは何曜日(月日を固定してシステム日付を取得) TextBox1.Text = "今年のクリスマスイブは何曜日" & vbCrLf TextBox1.Text &= String.Format("CDate(sysDT.Now.ToString(""yyyy/12/24"")).ToString(""dddd"") = {0}", _ CDate(sysDT.Now.ToString("yyyy/12/24")).ToString("dddd")) & vbCrLf '上記実行結果 'CDate(sysDT.Now.ToString("yyyy/12/24")).ToString("dddd") = 水曜日 End Sub |
13.1月1日からの通算日を取得(1〜366) |
Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click '1月1日からの通算日を取得(1〜366) TextBox1.Text = "1月1日から本日までの日数を求める" & vbCrLf 'DateTime.DayOfYear プロパティ 'このインスタンスで表される年間積算日を取得します。 TextBox1.Text &= String.Format("sysDT.Now.DayOfYear = {0}", sysDT.Now.DayOfYear) & vbCrLf '上記実行結果 'sysDT.Now.DayOfYear = 130 End Sub |
14.指定した日付に任意の日数を加算 |
Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click '指定した日付に任意の日数を加算 TextBox1.Text = "指定した日付に任意の日数を加算" & vbCrLf TextBox1.Text &= String.Format("dt = {0}", New System.DateTime(2012, 3, 1)) & vbCrLf Dim dt As New System.DateTime(2012, 3, 1) 'このインスタンスの値に、指定した日数を加算します。(3月1日の1日前の日は) TextBox1.Text &= String.Format("dt.AddDays(-1) = {0}", dt.AddDays(-1)) & vbCrLf '2012/03/01 の10日後は、 TextBox1.Text &= String.Format("dt.AddDays(10) = {0}", dt.AddDays(10)) & vbCrLf '2012/03/01 の13ヶ月後は、 TextBox1.Text &= String.Format("dt.AddMonths(13) = {0}", dt.AddMonths(13)) & vbCrLf '2012/03/01 の4年後は、 TextBox1.Text &= String.Format("dt.AddMonths(4) = {0}", dt.AddYears(4)) & vbCrLf '上記実行結果 'dt = 2012/03/01 0:00:00 'dt.AddDays(-1) = 2012/02/29 0:00:00 'dt.AddDays(10) = 2012/03/11 0:00:00 'dt.AddMonths(13) = 2013/04/01 0:00:00 'dt.AddMonths(4) = 2016/03/01 0:00:00 End Sub |
15.愛子様が生まれた日からの日数を求める |
Private Sub Button16_Click(sender As Object, e As EventArgs) Handles Button16.Click '愛子様が生まれた日からの日数を求める TextBox1.Text = "愛子様が生まれた日からの日数を求める" & vbCrLf Dim dt1 As System.DateTime = sysDT.Parse("2001/12/01") Dim dt2 As System.DateTime = sysDT.Now TextBox1.Text &= String.Format("dt1 = {0}", sysDT.Parse("2001/12/01 14:43:00")) & vbCrLf TextBox1.Text &= String.Format("dt2 = {0}", sysDT.Now) & vbCrLf 'DateTime.Subtract メソッド 'このインスタンスから指定した時刻または存続時間を減算します。 TextBox1.Text &= String.Format("dt2.Subtract(dt1).Days = {0:#,0}日", dt2.Subtract(dt1).Days) & vbCrLf TextBox1.Text &= String.Format("dt2.Subtract(dt1).TotalHours = {0:#,0.0}時間", dt2.Subtract(dt1).TotalHours) & vbCrLf '上記実行結果 'dt1 = 2001/12/01 14:43:00 'dt2 = 2014/05/10 16:53:20 'dt2.Subtract(dt1).Days = 4,543日 'dt2.Subtract(dt1).TotalHours = 109,048.9時間 End Sub |
16.プログラム等の処理時間を計測する(3方法) |
Private Sub Button17_Click(sender As Object, e As EventArgs) Handles Button17.Click '処理時間を計測 TextBox1.Text = "処理時間を計測" & vbCrLf Dim sTime0 As DateTime = Now Dim sTime1 As Single = Environment.TickCount 'System.Diagnostics.Stopwatch クラス を使った方法 Dim stopWatch As New Stopwatch() stopWatch.Start() For i As Integer = 0 To 5000 Debug.WriteLine(i) Next i Dim eTime0 As DateTime = Now Dim eTime1 As Single = Environment.TickCount stopWatch.Stop() TextBox1.Text &= String.Format("eTime0.Subtract(sTime0).TotalSeconds = {0:#,0.000} 秒かかりました。", _ eTime0.Subtract(sTime0).TotalSeconds) & vbCrLf TextBox1.Text &= String.Format("(eTime1 - sTime1) / 1000 = {0:#,0.000} 秒かかりました。", _ (eTime1 - sTime1) / 1000) & vbCrLf TextBox1.Text &= String.Format("Stopwatch.ElapsedMilliseconds / 1000 = {0:#,0.000} 秒かかりました。", _ stopWatch.ElapsedMilliseconds / 1000) & vbCrLf TextBox1.Text &= vbCrLf TextBox1.Text &= "何回かクリックして計りなおして見て下さい。" 'どちらの方法も殆ど変りません。(誤差の範囲内) '上記実行結果 'eTime0.Subtract(sTime0).TotalSeconds = 1.064 秒かかりました。 '(eTime1 - sTime1) / 1000 = 1.064 秒かかりました。 'Stopwatch.ElapsedMilliseconds / 1000 = 1.068 秒かかりました。 End Sub |
17.西暦から和暦に変換 |
Private Sub Button18_Click(sender As Object, e As EventArgs) Handles Button18.Click '西暦から和暦に変換 TextBox1.Text = "西暦から和暦に変換" & vbCrLf Dim jpCalendar As New System.Globalization.CultureInfo("ja") jpCalendar.DateTimeFormat.Calendar = New System.Globalization.JapaneseCalendar Dim dt As System.DateTime = sysDT.Now TextBox1.Text &= String.Format("dt = {0}", sysDT.Now) & vbCrLf TextBox1.Text &= String.Format("dt.ToString(""gyy年MM月dd日"", jpCalendar) = {0}", _ dt.ToString("gyy年MM月dd日", jpCalendar)) & vbCrLf '上記実行結果 'dt = 2014/05/10 17:59:46 'dt.ToString("gyy年MM月dd日", jpCalendar) = 平成26年05月10日 End Sub |
18.和暦から西暦に変換 |
Private Sub Button19_Click(sender As Object, e As EventArgs) Handles Button19.Click '和暦から西暦に変換 Dim jpCalendar As New System.Globalization.CultureInfo("ja") jpCalendar.DateTimeFormat.Calendar = New System.Globalization.JapaneseCalendar Dim dt As System.DateTime = sysDT.Now '------------------------------------------------------------------------------------ TextBox1.Text = "和暦から西暦に変換" & vbCrLf dt = CDate("平成26年05月10日") dt = CDate(dt.ToString("gyy年MM月dd日", jpCalendar)) TextBox1.Text &= String.Format("dt = {0}", dt.ToString("gyy年MM月dd日", jpCalendar)) & vbCrLf TextBox1.Text &= String.Format("dt.ToString(""yyyy年MM月dd日"") = {0}", dt.ToString("yyyy年MM月dd日")) & vbCrLf '上記実行結果 'dt = 平成26年05月10日 'dt.ToString("yyyy年MM月dd日") = 2014年05月10日 End Sub |
19.文字列(数字)を日付型へ変換 |
Private Sub Button20_Click(sender As Object, e As EventArgs) Handles Button20.Click '文字列(数字)を日付型へ変換 TextBox1.Text = "文字列(数字)を日付型へ変換" & vbCrLf TextBox1.Text &= String.Format("Date.ParseExact(""20140510"", ""yyyyMMdd"", Globalization.CultureInfo.InvariantCulture) = {0}", _ Date.ParseExact("20140510", "yyyyMMdd", Globalization.CultureInfo.InvariantCulture)) & vbCrLf TextBox1.Text &= String.Format("CDate(Format(CDbl(""20140510""), ""0000\/00\/00"") = {0}", _ CDate(Format(CDbl("20140510"), "0000\/00\/00"))) & vbCrLf TextBox1.Text &= String.Format("CDate(Format(20140510, ""0000\/00\/00"")) = {0}", _ CDate(Format(20140510, "0000\/00\/00"))) & vbCrLf '上記実行結果 'Date.ParseExact("20140510", "yyyyMMdd", Globalization.CultureInfo.InvariantCulture) = 2014/05/10 0:00:00 'CDate(Format(CDbl("20140510"), "0000\/00\/00") = 2014/05/10 0:00:00 'CDate(Format(20140510, "0000\/00\/00")) = 2014/05/10 0:00:00 End Sub |
20.日付型の文字列をDate型の値に変換する |
Private Sub Button21_Click(sender As Object, e As EventArgs) Handles Button21.Click '日付型の文字列をDate型の値に変換する TextBox1.Text = "文字列(数字)を日付型へ変換" & vbCrLf '指定した文字列形式の日付と時刻を等価の DateTime の値に変換します。 Dim strMyDate As String = "2014年05月10日" TextBox1.Text &= String.Format("strMyDate = {0}", "2014年05月10日") & vbCrLf TextBox1.Text &= String.Format("sysDT.Parse(strMyDate) = {0}", sysDT.Parse(strMyDate)) & vbCrLf TextBox1.Text &= String.Format("CType(strMyDate, System.DateTime) = {0}", CType(strMyDate, System.DateTime)) & vbCrLf '上記実行結果 'strMyDate = 2014年05月10日 'sysDT.Parse(strMyDate) = 2014/05/10 0:00:00 'CType(strMyDate, System.DateTime) = 2014/05/10 0:00:00 End Sub |
21.文字列の時刻情報を日付型の値に変換する |
Private Sub Button22_Click(sender As Object, e As EventArgs) Handles Button22.Click '文字列の時刻情報を日付型の時刻に変換する TextBox1.Text = "文字列の時刻情報を日付型の時刻に変換する" & vbCrLf '指定した文字列形式の日付と時刻を等価の DateTime の値に変換します。 Dim strMyTime As String = "14時25分30秒" TextBox1.Text &= String.Format("strMyTime = {0}", "14時25分30秒") & vbCrLf TextBox1.Text &= String.Format("sysDT.Parse(strMyTime) = {0}", sysDT.Parse(strMyTime)) & vbCrLf TextBox1.Text &= String.Format("sysDT.Parse(strMyTime).ToString(""T"") = {0}", sysDT.Parse(strMyTime).ToString("T")) & vbCrLf '上記実行結果 'strMyTime = 14時25分30秒 'sysDT.Parse(strMyTime) = 2014/05/10 14:25:30 'sysDT.Parse(strMyTime).ToString("T") = 14:25:30 End Sub |
22.年、月、日を表す日付型の値に変換 |
Private Sub Button23_Click(sender As Object, e As EventArgs) Handles Button23.Click '年、月、日を表す日付型の値に変換 TextBox1.Text = "年、月、日を表す日付型の値に変換" & vbCrLf Dim myDateTime As New System.DateTime(2014, 5, 10) TextBox1.Text &= String.Format("myDateTime = New System.DateTime(2014, 5, 10) = {0}", New System.DateTime(2014, 5, 10)) & vbCrLf TextBox1.Text &= String.Format("myDateTime.ToString(""d"") = {0}", myDateTime.ToString("d")) & vbCrLf '上記実行結果 'myDateTime = New System.DateTime(2014, 5, 10) = 2014/05/10 0:00:00 'myDateTime.ToString("d") = 2014/05/10 End Sub |
23.時、分、秒を表す日付型の値に変換 |
Private Sub Button24_Click(sender As Object, e As EventArgs) Handles Button24.Click '時、分、秒を表す日付型の値に変換 TextBox1.Text = "時、分、秒を表す日付型の値に変換" & vbCrLf Dim dt As New System.DateTime(2014, 5, 15, 14, 25, 30) TextBox1.Text &= String.Format("dt = New System.DateTime(2014, 5, 15, 14, 25, 30) = {0}", _ New System.DateTime(2014, 5, 15, 14, 25, 30)) & vbCrLf TextBox1.Text &= String.Format("dt.ToString(""T"") = {0}", dt.ToString("T")) & vbCrLf '上記実行結果 'dt = New System.DateTime(2014, 5, 15, 14, 25, 30) = 2014/05/15 14:25:30 'dt.ToString("T") = 14:25:30 End Sub |
24.コントロールパネルの地域の設定に影響されない日時の取得 |
Private Sub Button25_Click(sender As Object, e As EventArgs) Handles Button25.Click 'コントロールパネルの地域の設定に影響されない日時の取得 TextBox1.Text = "コントロールパネルの地域の設定に影響されない日時の取得" & vbCrLf TextBox1.Text &= String.Format("現在のカルチャ = {0}", _ Threading.Thread.CurrentThread.CurrentCulture.Name) & vbCrLf TextBox1.Text &= String.Format("現在のカルチャでの日時の取得 = {0}", sysDT.Now) & vbCrLf TextBox1.Text &= String.Format("Format(sysDT.Now, ""yyyy/MM/dd"") = {0}", Format(sysDT.Now, "yyyy/MM/dd")) & vbCrLf TextBox1.Text &= String.Format("Now.ToString(""F"") = {0}", Now.ToString("F")) & vbCrLf TextBox1.Text &= vbCrLf TextBox1.Text &= "カルチャを CultureInfo(""ja-JP"") に変更(地域の設定による)" & vbCrLf 'このスレッドの日付データを短い日付形式(日本語)でコントロールパネルの設定に依存 System.Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("ja-JP") TextBox1.Text &= String.Format("現在のカルチャでの日時の取得 = {0}", sysDT.Now) & vbCrLf TextBox1.Text &= String.Format("Format(sysDT.Now, ""yyyy/MM/dd"") = {0}", Format(sysDT.Now, "yyyy/MM/dd")) & vbCrLf TextBox1.Text &= String.Format("Now.ToString(""F"") = {0}", Now.ToString("F")) & vbCrLf TextBox1.Text &= vbCrLf TextBox1.Text &= "カルチャを CultureInfo(""ja"") に変更(地域の設定に影響されない)" & vbCrLf System.Threading.Thread.CurrentThread.CurrentCulture = New Globalization.CultureInfo("ja") TextBox1.Text &= String.Format("現在のカルチャでの日時の取得 = {0}", sysDT.Now) & vbCrLf TextBox1.Text &= String.Format("Format(sysDT.Now, ""yyyy/MM/dd"") = {0}", Format(sysDT.Now, "yyyy/MM/dd")) & vbCrLf TextBox1.Text &= String.Format("Now.ToString(""F"") = {0}", Now.ToString("F")) & vbCrLf '上記実行結果 '現在のカルチャ = en-US '現在のカルチャでの日時の取得 = 5/11/2014 6:37:42 AM 'Format(sysDT.Now, "yyyy/MM/dd") = 2014/05/11 'Now.ToString("F") = Sunday, May 11, 2014 6:37:42 AM 'カルチャを CultureInfo("ja-JP") に変更(地域の設定による) '現在のカルチャでの日時の取得 = 2014-05-11 06:37:42 'Format(sysDT.Now, "yyyy/MM/dd") = 2014-05-11 'Now.ToString("F") = 2014年05月11日 日曜日 06:37:42 'カルチャを CultureInfo("ja") に変更(地域の設定に影響されない) '現在のカルチャでの日時の取得 = 2014/05/11 6:37:42 'Format(sysDT.Now, "yyyy/MM/dd") = 2014/05/11 'Now.ToString("F") = 2014年5月11日 6:37:42 '------------------------------------------------------------------------------------------------ '※ コントロールパネルの地域の設定で、色々変更して試して見て下さい。 ' ご自分の取得したい形式を Form1_Load イベントに書いておくとユーザーによる変更に ' 影響されずに取得する事ができます。 End Sub |
25.Date 型の型変換時のエラーチェック |
Private Sub Button26_Click(sender As Object, e As EventArgs) Handles Button26.Click 'Date 型の型変換時のエラーチェック 'IsDate メソッド を使ってチェックするのが簡単です。(データ型の場合 = True それ以外は、False を返す ) '又は、TryParse メソッドを使用、TryParse メソッドの使用例を参照して下さい。 TextBox1.Text = "Date 型の型変換時のエラーチェック" & vbCrLf TextBox1.Text &= vbCrLf TextBox1.Text &= String.Format("IIf(IsDate(""2012/02/29""), ""OK"", ""NG"") = {0}", _ IIf(IsDate("2012/02/29"), "OK", "NG")) & vbCrLf TextBox1.Text &= String.Format("IIf(IsDate(""2014/02/29""), ""OK"", ""NG"") = {0}", _ IIf(IsDate("2014/02/29"), "OK", "NG")) & vbCrLf TextBox1.Text &= String.Format("IIf(IsDate(""2014-02-28""), ""OK"", ""NG"") = {0}", _ IIf(IsDate("2014-02-28"), "OK", "NG")) & vbCrLf TextBox1.Text &= String.Format("IIf(IsDate(""2014, 5, 15""), ""OK"", ""NG"") = {0}", _ IIf(IsDate("2014, 5, 15"), "OK", "NG")) & vbCrLf TextBox1.Text &= String.Format("IIf(IsDate(""2014, 5, 15, 14, 25, 30""), ""OK"", ""NG"") = {0}", _ IIf(IsDate("2014, 5, 15, 14, 25, 30"), "OK", "NG")) & vbCrLf TextBox1.Text &= String.Format("IIf(IsDate(""2014, 5, 15 14: 25:30""), ""OK"", ""NG"") = {0}", _ IIf(IsDate("2014, 5, 15 14: 25:30"), "OK", "NG")) & vbCrLf TextBox1.Text &= String.Format("IIf(IsDate(""2014年02月28日""), ""OK"", ""NG"") = {0}", _ IIf(IsDate("2014年02月28日"), "OK", "NG")) & vbCrLf TextBox1.Text &= String.Format("IIf(IsDate(""2014/02/28 20:15:00""), ""OK"", ""NG"") = {0}", _ IIf(IsDate("2014/02/28 20:15:00"), "OK", "NG")) & vbCrLf TextBox1.Text &= String.Format("IIf(IsDate(""2014/02/28 20:15:60""), ""OK"", ""NG"") = {0}", _ IIf(IsDate("2014/02/28 20:15:60"), "OK", "NG")) & vbCrLf TextBox1.Text &= vbCrLf '上記実行結果 'Date 型の型変換時のエラーチェック 'IIf(IsDate("2012/02/29"), "OK", "NG") = OK 'IIf(IsDate("2014/02/29"), "OK", "NG") = NG 'IIf(IsDate("2014-02-28"), "OK", "NG") = OK 'IIf(IsDate("2014, 5, 15"), "OK", "NG") = OK 'IIf(IsDate("2014, 5, 15, 14, 25, 30"), "OK", "NG") = NG 'IIf(IsDate("2014, 5, 15 14: 25:30"), "OK", "NG") = OK 'IIf(IsDate("2014年02月28日"), "OK", "NG") = OK 'IIf(IsDate("2014/02/28 20:15:00"), "OK", "NG") = OK 'IIf(IsDate("2014/02/28 20:15:60"), "OK", "NG") = NG '数字のデータを日付型に変換する場合は、下記のように求める桁数等と日付の範囲の両方をチェックする Dim dDT As Double = 20140229 If CStr(dDT).Length <> 8 Then MessageBox.Show("エラー1") Exit Sub End If Dim s1 As String = Format(dDT, "0000\/00\/00") If IsDate(s1) = False Then MessageBox.Show("エラー2") End If End Sub |
26. |
27. |
28. |
29. |
30. |
31. |
32. |
33. |
34. |
35. |
36. |
検索キーワード及びサンプルコードの別名(機能名) |