DateTime 構造体とは? わかりやすく解説

DateTime 構造体

通常日付時刻として表現される瞬間表します

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<SerializableAttribute> _
Public Structure DateTime
    Implements IComparable, IFormattable, IConvertible, ISerializable,
 _
    IComparable(Of DateTime), IEquatable(Of
 DateTime)
[SerializableAttribute] 
public struct DateTime : IComparable, IFormattable, IConvertible,
 
    ISerializable, IComparable<DateTime>, IEquatable<DateTime>
[SerializableAttribute] 
public value class DateTime : IComparable,
 IFormattable, IConvertible, 
    ISerializable, IComparable<DateTime>, IEquatable<DateTime>
/** @attribute SerializableAttribute() */ 
public final class DateTime extends ValueType
 implements IComparable, IFormattable, 
    IConvertible, ISerializable, IComparable<DateTime>, IEquatable<DateTime>
JScript では、構造体使用できますが、新規に宣言することはできません。
解説解説

DateTime 値型は、A.D. (西暦紀元) 0001 年 1 月 1 日午前 00:00:00 から A.D. (西暦紀元) 999912 月 31 日午後 11:59:59 までの間の値で日付と時刻表します

時刻値は 100 ナノ秒単位 (タイマ刻み) で表し日付GregorianCalendar 暦の A.D. (西暦紀元) 1 年 1 月 1 日午前 00:00 からのタイマ刻み数で表します。たとえば、タイマ刻み値 31241376000000000L は、01001 月 1 日 (金曜日) の深夜 12:00:00表しますDateTime 値は、常に、明示的な暦または既定の暦のコンテキスト表されます。

バージョン考慮事項
DateTime
DateTime 演算
DateTime と TimeSpan

DateTime 値型と TimeSpan 値型の違う点は、DateTime瞬間表しTimeSpan時間間隔を表すことです。つまり、たとえば DateTime1 つインスタンス別のインスタンスか減算すると、それら 2 つインスタンス間の時間間隔取得できます。または、現在の DateTime に正の TimeSpan加算する将来日付算出されます。

DateTime オブジェクトでは、時間間隔加算したり、減算したりできます時間間隔指定には、正数負数タイマ刻み数や秒数、または TimeSpan オブジェクト使用できます

COM 相互運用上の考慮事項

DateTime 値は、一度COM アプリケーション転送しその後、再びマネージ アプリケーションに戻すことができます。これを "値がラウンドトリップした" と言います。しかし、DateTime 値に時刻しか指定されていないと、期待どおりに値がラウンドトリップしてくれません。

時刻だけ (たとえば、午後 3:00) をラウンドトリップさせた場合最終的に返る日時西暦 1899 年 12 月 30 日午後 3:00なります西暦 0001 年 1 月 1 日午後 3:00 とはなりません。これは、.NET FrameworkCOM とでは、時刻しか指定しなかった場合用いられる既定日付異なるためです。COM システムでは基準となる日付西暦 1899 年 12 月 30 日想定しているのに対し.NET Framework では西暦 0001 年 1 月 1 日想定されています。

.NET Framework から COM時刻しか渡さなかった場合COM 用の時刻形式変換するための特殊な処理が実行されます。COM から .NET Framework時刻だけを渡した場合特殊な処理は実行されません。特殊な処理を適用すると、1899 年 12 月 30 日以前日時情報正しく維持されないためです。逆に言えば日付COM からラウンドトリップさせた場合は、.NET FrameworkCOM 間でその日付が維持されることになります

.NET FrameworkCOM における、こうした動作違い正しく理解することが大切です。時刻情報だけを指定した DateTimeラウンドトリップさせる場合最終的に返されDateTime オブジェクト対し誤った日付修正する無視する処理をアプリケーション側で実装する必要があります

実装されているインターフェイス

この型は、IComparable、IComparable、IFormattable、IConvertible の各インターフェイス実装ます。この型の明示的な IConvertible インターフェイス メンバ実装代わりにConvert クラス使用します

使用例使用例

ほぼ等しい DateTime の値を比較して一定の小さな範囲許容誤差において "等しい" と判定する方法次のコード例示します

Class DateTimeTester
   
   Shared Function RoughlyEquals(time As
 DateTime, timeWithWindow As DateTime, windowInSeconds As
 Integer, frequencyInSeconds As Integer) As Boolean
      
      Dim delta As Long
 = (timeWithWindow.Subtract(time)).TotalSeconds Mod frequencyInSeconds
      
      If delta > windowInSeconds Then 
    delta = frequencyInSeconds - delta 
      End If
   
      
      Return Math.Abs(delta) < windowInSeconds

   End Function 'RoughlyEquals
    
   
   Public Shared Sub Main()

      Dim window As Integer
 = 10
      Dim freq As Integer
 = 60 * 60 * 2 ' 2 hours;
      Dim d1 As DateTime = DateTime.Now
      
      Dim d2 As DateTime = d1.AddSeconds((2
 * window))
      Dim d3 As DateTime = d1.AddSeconds((-
 2 * window))
      Dim d4 As DateTime = d1.AddSeconds((window
 / 2))
      Dim d5 As DateTime = d1.AddSeconds((-
 window / 2))
      
      Dim d6 As DateTime = d1.AddHours(2).AddSeconds((2
 * window))
      Dim d7 As DateTime = d1.AddHours(2).AddSeconds((-
 2 * window))
      Dim d8 As DateTime = d1.AddHours(2).AddSeconds((window
 / 2))
      Dim d9 As DateTime = d1.AddHours(2).AddSeconds((-
 window / 2))
      
      Console.WriteLine("d1 ~= d1 [true]: " + CStr(RoughlyEquals(d1,
 d1, window, freq)))
      Console.WriteLine("d1 ~= d2 [false]: " + CStr(RoughlyEquals(d1,
 d2, window, freq)))
      Console.WriteLine("d1 ~= d3 [false]: " + CStr(RoughlyEquals(d1,
 d3, window, freq)))
      Console.WriteLine("d1 ~= d4 [true]: " + CStr(RoughlyEquals(d1,
 d4, window, freq)))
      Console.WriteLine("d1 ~= d5 [true]: " + CStr(RoughlyEquals(d1,
 d5, window, freq)))
      
      Console.WriteLine("d1 ~= d6 [false]: " + CStr(RoughlyEquals(d1,
 d6, window, freq)))
      Console.WriteLine("d1 ~= d7 [false]: " + CStr(RoughlyEquals(d1,
 d7, window, freq)))
      Console.WriteLine("d1 ~= d8 [true]: " + CStr(RoughlyEquals(d1,
 d8, window, freq)))
      Console.WriteLine("d1 ~= d9 [true]: " + CStr(RoughlyEquals(d1,
 d9, window, freq)))

   End Sub 'Main 

End Class 'DateTimeTester 

class DateTimeTester {

    static bool RoughlyEquals(DateTime time,
 DateTime timeWithWindow, int windowInSeconds, int
 frequencyInSeconds)
    {

            long delta = (long)((TimeSpan)(timeWithWindow - time)).TotalSeconds %
 frequencyInSeconds;

            delta = delta > windowInSeconds ? frequencyInSeconds - delta : delta;

            return Math.Abs(delta) < windowInSeconds;

    }

    public static void Main()
 
    {
            int window = 10;
            int freq = 60 * 60 * 2; // 2 hours;

            DateTime d1 = DateTime.Now;

            DateTime d2 = d1.AddSeconds(2 * window);
            DateTime d3 = d1.AddSeconds(-2 * window);
            DateTime d4 = d1.AddSeconds(window / 2);
            DateTime d5 = d1.AddSeconds(-window / 2);

            DateTime d6 = (d1.AddHours(2)).AddSeconds(2 * window);
            DateTime d7 = (d1.AddHours(2)).AddSeconds(-2 * window);
            DateTime d8 = (d1.AddHours(2)).AddSeconds(window / 2);
            DateTime d9 = (d1.AddHours(2)).AddSeconds(-window / 2);

            Console.WriteLine("d1 ~= d1 [true]: " +
 RoughlyEquals(d1, d1, window, freq));
            Console.WriteLine("d1 ~= d2 [false]: " +
 RoughlyEquals(d1, d2, window, freq));
            Console.WriteLine("d1 ~= d3 [false]: " +
 RoughlyEquals(d1, d3, window, freq));
            Console.WriteLine("d1 ~= d4 [true]: " +
 RoughlyEquals(d1, d4, window, freq));
            Console.WriteLine("d1 ~= d5 [true]: " +
 RoughlyEquals(d1, d5, window, freq));

            Console.WriteLine("d1 ~= d6 [false]: " +
 RoughlyEquals(d1, d6, window, freq));
            Console.WriteLine("d1 ~= d7 [false]: " +
 RoughlyEquals(d1, d7, window, freq));
            Console.WriteLine("d1 ~= d8 [true]: " +
 RoughlyEquals(d1, d8, window, freq));
            Console.WriteLine("d1 ~= d9 [true]: " +
 RoughlyEquals(d1, d9, window, freq));


    }
}
bool RoughlyEquals( DateTime time, DateTime timeWithWindow, int
 windowInSeconds, int frequencyInSeconds )
{
   long delta = (long)((TimeSpan)(timeWithWindow - time)).TotalSeconds % frequencyInSeconds;
   delta = delta > windowInSeconds ? frequencyInSeconds - delta : delta;
   return Math::Abs( delta ) < windowInSeconds;
}

int main()
{
   int window = 10;
   int freq = 60 * 60 * 2; // 2 hours;

   DateTime d1 = DateTime::Now;
   DateTime d2 = d1.AddSeconds( 2 * window );
   DateTime d3 = d1.AddSeconds(  -2 * window );
   DateTime d4 = d1.AddSeconds( window / 2 );
   DateTime d5 = d1.AddSeconds(  -window / 2 );
   DateTime d6 = (d1.AddHours( 2 )).AddSeconds( 2 * window );
   DateTime d7 = (d1.AddHours( 2 )).AddSeconds(  -2 * window );
   DateTime d8 = (d1.AddHours( 2 )).AddSeconds( window / 2 );
   DateTime d9 = (d1.AddHours( 2 )).AddSeconds(  -window / 2 );
   Console::WriteLine( "d1 ~= d1 [true]: {0}", RoughlyEquals(
 d1, d1, window, freq ) );
   Console::WriteLine( "d1 ~= d2 [false]: {0}", RoughlyEquals(
 d1, d2, window, freq ) );
   Console::WriteLine( "d1 ~= d3 [false]: {0}", RoughlyEquals(
 d1, d3, window, freq ) );
   Console::WriteLine( "d1 ~= d4 [true]: {0}", RoughlyEquals(
 d1, d4, window, freq ) );
   Console::WriteLine( "d1 ~= d5 [true]: {0}", RoughlyEquals(
 d1, d5, window, freq ) );
   Console::WriteLine( "d1 ~= d6 [false]: {0}", RoughlyEquals(
 d1, d6, window, freq ) );
   Console::WriteLine( "d1 ~= d7 [false]: {0}", RoughlyEquals(
 d1, d7, window, freq ) );
   Console::WriteLine( "d1 ~= d8 [true]: {0}", RoughlyEquals(
 d1, d8, window, freq ) );
   Console::WriteLine( "d1 ~= d9 [true]: {0}", RoughlyEquals(
 d1, d9, window, freq ) );
}

class DateTimeTester
{
    public static boolean RoughlyEquals(DateTime
 time, 
        DateTime timeWithWindow, int windowInSeconds, int
 frequencyInSeconds)
    {
        long delta = (long)((TimeSpan)timeWithWindow.Subtract(time)).
            get_TotalSeconds() % frequencyInSeconds;
        delta = delta > windowInSeconds ? frequencyInSeconds - delta : delta;
        return (System.Convert.ToBoolean(System.Math.Abs(delta)
 
            < windowInSeconds));
    } //RoughlyEquals

    public static void main(String[]
 args)
    {
        int window = 10;
        int freq = 60 * 60 * 2; // 2 hours;
        DateTime d1 = DateTime.get_Now();
        DateTime d2 = d1.AddSeconds(2 * window);
        DateTime d3 = d1.AddSeconds(-2 * window);
        DateTime d4 = d1.AddSeconds(window / 2);
        DateTime d5 = d1.AddSeconds(-window / 2);

        DateTime d6 = d1.AddHours(2).AddSeconds(2 * window);
        DateTime d7 = d1.AddHours(2).AddSeconds(-2 * window);
        DateTime d8 = d1.AddHours(2).AddSeconds(window / 2);
        DateTime d9 = d1.AddHours(2).AddSeconds(-window / 2);

        Console.WriteLine("d1 ~= d1 [true]: " 
            + RoughlyEquals(d1, d1, window, freq));
        Console.WriteLine("d1 ~= d2 [false]: " 
            + RoughlyEquals(d1, d2, window, freq));
        Console.WriteLine("d1 ~= d3 [false]: " 
            + RoughlyEquals(d1, d3, window, freq));
        Console.WriteLine("d1 ~= d4 [true]: " 
            + RoughlyEquals(d1, d4, window, freq));
        Console.WriteLine("d1 ~= d5 [true]: " 
            + RoughlyEquals(d1, d5, window, freq));
        Console.WriteLine("d1 ~= d6 [false]: " 
            + RoughlyEquals(d1, d6, window, freq));
        Console.WriteLine("d1 ~= d7 [false]: " 
            + RoughlyEquals(d1, d7, window, freq));
        Console.WriteLine("d1 ~= d8 [true]: " 
            + RoughlyEquals(d1, d8, window, freq));
        Console.WriteLine("d1 ~= d9 [true]: " 
            + RoughlyEquals(d1, d9, window, freq));
    } //main 
} //DateTimeTester 
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「DateTime 構造体」の関連用語

DateTime 構造体のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



DateTime 構造体のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS