MRが楽しい

MRやVRについて学習したことを書き残す

C#でDateTimeとTimeSpanを使って時刻の計算を行う

本日はC#の小ネタ枠です。
DateTimeとTimeSpanを使って時刻の計算を行う方法についてです。

DateTimeとTimeSpan

DateTime構造体は特定の時点を表します。通常、日時形式で表されます。
learn.microsoft.com

DateSpan構造体は時間間隔を表します。
例えば、あるDateTime値からDateTime値を減算すると、TimeSpan値が返されます。
learn.microsoft.com

サンプルスクリプト

DataTime値からDataSpan値を加減算して特定の時刻を算出したり、TimeSpan値を様々な単位で表示するサンプルコードを作成しました。
・TimeSpanTest.cs

using UnityEngine;

public class TimeSpanTest : MonoBehaviour
{
    void Start()
    {
        // 現在の時刻を取得する
        System.DateTime now = System.DateTime.Now;
        Debug.Log("現在の時刻を取得する");
        Debug.Log("Now: " + now);
        
        // TimeSpanで加算して1分後、1時間後、1日後、1カ月後の時刻を取得する
        Debug.Log("TimeSpanで加算して1分後、1時間後、1日後、1カ月後の時刻を取得する");
        System.DateTime after1Minutes = now + System.TimeSpan.FromMinutes(1);
        Debug.Log("After 1 Minutes: " + after1Minutes);
        System.DateTime after1Hours = now + System.TimeSpan.FromHours(1);
        Debug.Log("After 1 Hours: " + after1Hours);
        System.DateTime after1Days = now + System.TimeSpan.FromDays(1);
        Debug.Log("After 1 Days: " + after1Days);
        System.DateTime after1Months = now + System.TimeSpan.FromDays(30);
        Debug.Log("After 1 Months: " + after1Months);
        
        // TimeSpanで減算して1分後、1時間前、1日前、1カ月前の時刻を取得する
        Debug.Log("TimeSpanで減算して1分後、1時間前、1日前、1カ月前の時刻を取得する");
        System.DateTime before1Minutes = now - System.TimeSpan.FromMinutes(1);
        Debug.Log("Before 1 Minutes: " + before1Minutes);
        System.DateTime before1Hours = now - System.TimeSpan.FromHours(1);
        Debug.Log("Before 1 Hours: " + before1Hours);
        System.DateTime before1Days = now - System.TimeSpan.FromDays(1);
        Debug.Log("Before 1 Days: " + before1Days);
        System.DateTime before1Months = now - System.TimeSpan.FromDays(30);
        Debug.Log("Before 1 Months: " + before1Months);
        
        // TimeSpanで1カ月の日数、時間数、分数を取得する
        Debug.Log("TimeSpanで1カ月の日数、時間数、分数を取得する");
        System.TimeSpan oneMonth = System.TimeSpan.FromDays(30);
        Debug.Log("One Month Days: " + oneMonth.TotalDays);
        Debug.Log("One Month Hours: " + oneMonth.TotalHours);
        Debug.Log("One Month Minutes: " + oneMonth.TotalMinutes);
    }
}

上記のプログラムを実行すると以下の結果が出力されます。

現在の時刻を取得する
Now: 2023/11/17 23:35:12

TimeSpanで加算して1分後、1時間後、1日後、1カ月後の時刻を取得する
After 1 Minutes: 2023/11/17 23:36:12
After 1 Hours: 2023/11/18 0:35:12
After 1 Days: 2023/11/18 23:35:12
After 1 Months: 2023/12/17 23:35:12

TimeSpanで減算して1分後、1時間前、1日前、1カ月前の時刻を取得する
Before 1 Minutes: 2023/11/17 23:34:12
Before 1 Hours: 2023/11/17 22:35:12
Before 1 Days: 2023/11/16 23:35:12
Before 1 Months: 2023/10/18 23:35:12

TimeSpanで1カ月の日数、時間数、分数を取得する
One Month Days: 30
One Month Hours: 720
One Month Minutes: 43200