C#/VB.NET で日付・時間を扱う方法について解説します。
時間や日付を操作する方法は色々あって難しいですね。
日付・時間の操作する手法をいくつかまとめてみましょう。
現在の日付と時刻を取得する方法
現在のシステム日付を取得するには、DateTimeのTodayプロパティから取得できます。
DateTime.Today
現在の日付と時間を取得するには、Nowプロパティから取得できます。
DateTime.Now
日付要素(年、月、日)を取得する方法
年、月、日をそれぞれ取得するには、DateTimeオブジェクトからYearプロパティ、Monthプロパティ、Dayプロパティよりそれぞれ取得できます。
//現在日時を取得
var dt = DateTime.Now;
//年を文字列として取得
string strYear = dt.Year.ToString();
//月を文字列として取得
string strMonth = dt.Month.ToString();
//日を文字列として取得
string strDay = dt.Day.ToString();
' 現在日時を取得
Dim dt As DateTime = DateTime.Now
' 年を文字列として取得
Dim strYear As String = dt.Year.ToString()
' 月を文字列として取得
Dim strMonth As String = dt.Month.ToString()
' 日を文字列として取得
Dim strDay As String = dt.Day.ToString()
時刻要素を取得する方法
時刻から、時、分、秒を取得するには、DateTime オブジェクトから Hourプロパティ、Minuteプロパティ、Secondプロパティを利用します。
//現在日時を取得
var dt = DateTime.Now;
//時を文字列として取得
string strHour = dt.Hour.ToString();
//分を文字列として取得
string strMinute = dt.Minute.ToString();
//秒を文字列として取得
string strSecond = dt.Second.ToString();
' 現在日時を取得
Dim dt As DateTime = DateTime.Now
' 時を文字列として取得
Dim strHour As String = dt.Hour.ToString()
' 分を文字列として取得
Dim strMinute As String = dt.Minute.ToString()
' 秒を文字列として取得
Dim strSecond As String = dt.Second.ToString()
曜日を取得する方法
曜日を取得するには、DateTime の DayOfWeek プロパティを使います。
DayOfWeek列挙型は、以下のメンバーを返します。
Member | 値 |
---|---|
Sunday | 0 |
Monday | 1 |
Tuesday | 2 |
Wednesday | 3 |
Thursday | 4 |
Friday | 5 |
Saturday | 6 |
//現在日時を取得
var dt = DateTime.Now;
// 曜日を格納する文字列を初期化
string strYoubi = string.Empty;
//曜日に応じて文字列を設定
switch (dt.DayOfWeek)
{
case DayOfWeek.Sunday:
strYoubi = "日";
break;
case DayOfWeek.Monday:
strYoubi = "月";
break;
case DayOfWeek.Tuesday:
strYoubi = "火";
break;
case DayOfWeek.Wednesday:
strYoubi = "水";
break;
case DayOfWeek.Thursday:
strYoubi = "木";
break;
case DayOfWeek.Friday:
strYoubi = "金";
break;
case DayOfWeek.Saturday:
strYoubi = "土";
break;
}
' 現在日時を取得
Dim dt As DateTime = DateTime.Now
' 曜日を格納する文字列を初期化
Dim strYoubi As String = String.Empty
' 曜日に応じて文字列を設定
Select Case dt.DayOfWeek
Case DayOfWeek.Sunday
strYoubi = "日"
Case DayOfWeek.Monday
strYoubi = "月"
Case DayOfWeek.Tuesday
strYoubi = "火"
Case DayOfWeek.Wednesday
strYoubi = "水"
Case DayOfWeek.Thursday
strYoubi = "木"
Case DayOfWeek.Friday
strYoubi = "金"
Case DayOfWeek.Saturday
strYoubi = "土"
End Select
一定期間の前後を指定し日付、時刻を取得する方法
DateTimeクラスの任意の年数や月数、日数を加算した日付や時刻を取得することができます。
年数・月数・日数を取得する方法
DateTimeクラスのAddYearsメソッドやAddMonthsメソッド、AddDaysメソッドを使用することで、任意の年数や月数、日数を加算した日付を取得することができます。
- 任意の年数を加算した年を取得するには、DateTimeのAddYearsメソッド
- 任意の月数を加算した月を取得するには、DateTimeのAddMonthsメソッド
- 任意の日数を加算した日付を取得するには、DateTimeのAddDaysメソッド
以下は年・月・日のメソッドを使用したサンプルです。
var dt = DateTime.Now;
//現在日時から5年後をyyyy/MM/dd形式の文字列として取得
var day1 = dt.AddYears(5).ToString(); //プラスまたはマイナスを指定
//現在日時から3ヶ月前をyyyy/MM/dd形式の文字列として取得
var day2 = dt.AddMonths(-3).ToString(); //プラスまたはマイナスを指定
//現在日時から2.4日後をyyyy/MM/dd形式の文字列として取得
var day3 = dt.AddDays(2.4).ToString(); //プラスまたはマイナスを指定
Dim dt As DateTime = DateTime.Now
' 現在日時から5年後をyyyy/MM/dd形式の文字列として取得
Dim day1 As String = dt.AddYears(5).ToString("yyyy/MM/dd")
' 現在日時から3ヶ月前をyyyy/MM/dd形式の文字列として取得
Dim day2 As String = dt.AddMonths(-3).ToString("yyyy/MM/dd")
' 現在日時から2.4日後をyyyy/MM/dd形式の文字列として取得
Dim day3 As String = dt.AddDays(2.4).ToString("yyyy/MM/dd")
AddYearsメソッドやAddMonthsメソッド、AddDaysメソッドは、DateTime型のインスタンスを生成することなく、既存のDateTime型のインスタンスから新しいDateTime型のインスタンスを生成することができるのが特徴です。
時間・分・秒を取得する方法
DateTimeクラスのAddHoursメソッドやAddMinutesメソッド、AddSecondsメソッドを使用することで、任意の時刻を取得することができます。
- 任意の時間後の時間を取得するには、AddHoursメソッド
- 任意の分数後の時間を取得するには、AddMinutesメソッド
- 任意の秒数後の時間を取得するには、AddSecondsメソッド
以下は時間・分・秒のメソッドを使用したサンプルです。
var dt = DateTime.Now;
//現在日時から3時間後をyyyy/MM/dd HH:mm:ss形式の文字列として取得
var day4 = dt.AddHours(3).ToString();
//現在日時から3分前をyyyy/MM/dd HH:mm:ss形式の文字列として取得
var day5 = dt.AddMinutes(-3).ToString();
//現在日時から1.5秒後をyyyy/MM/dd HH:mm:ss形式の文字列として取得
var day6 = dt.AddSeconds(1.5).ToString();
Dim dt As DateTime = DateTime.Now
' 現在日時から3時間後をyyyy/MM/dd HH:mm:ss形式の文字列として取得
Dim day4 As String = dt.AddHours(3).ToString("yyyy/MM/dd HH:mm:ss")
' 現在日時から3分前をyyyy/MM/dd HH:mm:ss形式の文字列として取得
Dim day5 As String = dt.AddMinutes(-3).ToString("yyyy/MM/dd HH:mm:ss")
' 現在日時から1.5秒後をyyyy/MM/dd HH:mm:ss形式の文字列として取得
Dim day6 As String = dt.AddSeconds(1.5).ToString("yyyy/MM/dd HH:mm:ss")
2つの日時の間隔を取得する方法
2つの日時の間隔を取得するには、DateTimeのSubtractメソッドを利用します。
//開始時間
DateTime sTime;
//終了時間
DateTIme eTime;
private void Form1_Load(object sender, EventArgs e)
{
sTime = DateTime.Now;
}
private void button1_Click(object sender, EventArgs e)
{
eTime = DateTime.Now;
//開始時間と終了時間の差分をTimeSpan型で取得
var ts = eTime.Subtract(sime);
}
' 開始時間
Dim sTime As DateTime
' 終了時間
Dim eTime As DateTime
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
sTime = DateTime.Now
End Sub
Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click
eTime = DateTime.Now
' 開始時間と終了時間の差分をTimeSpan型で取得
Dim ts As TimeSpan = eTime.Subtract(sTime)
End Sub
DateTime型のオブジェクトのSubtractメソッドを使用することで、二つの日付や時刻の差分を取得することができます。Subtractメソッドは、TimeSpan型を返します。
任意の日付を作成する方法
DateTime型を使用することで、任意の日時を表すDateTimeオブジェクトを作成することができます。
DateTime型には、複数のコンストラクタがあり、年月日、年月日時分秒、などの日時情報を指定してDateTimeオブジェクトを作成することができます。
//2022年2月20日を表すDateTimeオブジェクトを作成
var dt1 = new DateTime(2022, 2, 20);
//2022年5月1日12時10分44秒を表すDateTimeオブジェクトを作成
var dt2 = new DateTime(2022, 5, 1, 12, 10, 44);
' 2022年2月20日を表すDateTimeオブジェクトを作成
Dim dt1 As New DateTime(2022, 2, 20)
' 2022年5月1日12時10分44秒を表すDateTimeオブジェクトを作成
Dim dt2 As New DateTime(2022, 5, 1, 12, 10, 44)
日付文字列を日付データにする方法
文字列を日付データに変換するには、DateTimeのParseメソッド、TryParseメソッドを利用します。
DateTime型のParseメソッドを使用すると、文字列を日付データのDateTime型に変換できます。また、DateTime型のTryParseメソッドを使用すると、文字列を日付データのDateTime型に変換できます。
//日付文字列を表すDateTime型の変数を宣言
DateTime dt;
//TextBox1コントロールから入力された文字列をDateTime型に変換
DateTime.Parse(textBox1.Text);
//TextBox1コントロールから入力された文字列をDateTime型に変換し、変換に成功したかをBoolean型で返す
DateTime.TryParse(textBox1.Text,out dt);
' 日付文字列を表すDateTime型の変数を宣言
Dim dt As DateTime
' TextBox1コントロールから入力された文字列をDateTime型に変換
DateTime.Parse(textBox1.Text)
' TextBox1コントロールから入力された文字列をDateTime型に変換し、変換に成功したかをBoolean型で返す
DateTime.TryParse(textBox1.Text, dt)
Parse、TryParseの違いは、Parseは変換に失敗した場合に例外をスローするのに対し、TryParseは変換に失敗した場合にfalseを返す点です。
日付文字列を変換する前に、文字列が正しい日付フォーマットであることを確認する必要があります。
リスキリングでキャリアアップしてみませんか?
リスキリング(学び直し)は、経済産業省が推奨しており、
今だけ、最大70%のキャッシュバックを受けることができます。
最大70%の給付金が出るおすすめのプログラミングスクール!
国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!
興味のある方はすぐに確認しましょう。
まとめ
C#/VB.NET で日付・時間を扱う方法について解説しました。
- 現在の日時を取得する方法:DateTime.Today、DateTime.Nowプロパティを使用する。
- 日付要素を取得する方法:DateTime.Yearプロパティ、DateTime.Monthプロパティ、DateTime.Dayプロパティを使用する。
- 時刻要素を取得する方法:DateTime.Hourプロパティ、DateTime.Minuteプロパティ、DateTime.Secondプロパティを使用する。
- 曜日を取得する方法:DateTime.DayOfWeekプロパティを使用する。
- 一定期間の前後を指定し日付、時刻を取得する方法:年月日はAddYearsメソッド、AddMonthsメソッド、AddDaysメソッドを使用する。時分秒はAddHoursメソッド、AddMinutesメソッド、AddSecondsメソッドを使用する。
- 2つの日時の間隔を取得する方法:Subtractメソッドを使用する。
- 任意の日付を作成する方法:DateTimeクラスのコンストラクタを使用する。
- 日付文字列を日付データにする方法:DateTime.Parseメソッド、DateTime.TryParseメソッドを使用
これで日付操作が簡単にできそうです!
たまに利用しようとすると忘れていることも多いので、
すぐ確認できるようにしておくと便利です。
コメント