2015-08-29T22:23:18の更新内容

programming/netfx/datetime/0_abstract/index.wiki.txt

current previous
2721,7 2721,7
 

        

        
 
なお、文字列に変換するにはToStringメソッド、文字列からDateTime・DateTimeOffsetに変換するにはParseメソッドを使うことが出来ます。 文字列との相互変換については[[programming/netfx/datetime/2_formatting_parsing]]で詳しく解説します。 他にもConvertクラスを使った変換も行えますが、詳しくは[[programming/netfx/conversion/0_basetype]]を参照してください。
なお、文字列に変換するにはToStringメソッド、文字列からDateTime・DateTimeOffsetに変換するにはParseメソッドを使うことが出来ます。 文字列との相互変換については[[programming/netfx/datetime/2_formatting_parsing]]で詳しく解説します。 他にもConvertクラスを使った変換も行えますが、詳しくは[[programming/netfx/conversion/0_basetype]]を参照してください。
 

        

        
~
また、DateTimeにはUNIX時間(UNIXタイムスタンプ)との相互変換を行うメソッドは用意されていません。 .NET Framework 4.6以降では、DateTimeOffsetにのみ用意される&msdn(netfx,member,System.DateTimeOffset.ToUnixTimeSeconds){ToUnixTimeSeconds};および&msdn(netfx,member,System.DateTimeOffset.FromUnixTimeSeconds){FromUnixTimeSeconds};メソッドを使うことでUNIX時間との相互変換を行うことができます。 このメソッドの詳細およびUNIX時間との相互変換を実装する方法については[[programming/netfx/tips/convert_unixtime_into_datetime]]で解説しています。
また、DateTime・DateTimeOffsetにはUNIX時間(UNIXタイムスタンプ)との相互変換を行うメソッドは用意されていません。 UNIX時間との相互変換を実装する方法については[[programming/netfx/tips/convert_unixtime_into_datetime]]で解説しています。
 

        

        
 
***ToFileTime/FromFileTime [#DateTime_ToFileTimeFromFileTime]
***ToFileTime/FromFileTime [#DateTime_ToFileTimeFromFileTime]
 
ToFileTime・FromFileTimeメソッドは、日時の値をWindowsのファイルタイムスタンプで使われるlong型(64ビット)の値に変換します。
ToFileTime・FromFileTimeメソッドは、日時の値をWindowsのファイルタイムスタンプで使われるlong型(64ビット)の値に変換します。

programming/netfx/tips/convert_unixtime_into_datetime/index.wiki.txt

current previous
11,101 11,7
 
--[[programming/netfx/tips/get_last_day_of_month]]
--[[programming/netfx/tips/get_last_day_of_month]]
 
--[[programming/netfx/tips/calc_elapsed_years]]
--[[programming/netfx/tips/calc_elapsed_years]]
 

        

        
~
*.NET Framework 4.6以降
*変換方法と実装
+
DateTimeOffset構造体のメソッド&msdn(netfx,member,System.DateTimeOffset.ToUnixTimeSeconds){ToUnixTimeSeconds};および&msdn(netfx,member,System.DateTimeOffset.FromUnixTimeSeconds){FromUnixTimeSeconds};を使うことにより、DateTimeOffsetで表される時間とUNIX時間を相互に変換することができる。
+

          
+
#tabpage(codelang=cs)
+
#code{{
+
using System;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    // DateTimeOffsetからUNIX時間への変換
+
    var dto = new DateTimeOffset(2009, 02, 13, 23, 31, 30, new TimeSpan(+00, 00, 00));
+

          
+
    Console.WriteLine(dto.ToUnixTimeSeconds());
+

          
+
    // 2038-01-19T03:14:07+00:00をUNIX時間に変換
+
    Console.WriteLine((new DateTimeOffset(2038, 01, 19, 03, 14, 07, new TimeSpan(+00, 00, 00))).ToUnixTimeSeconds());
+

          
+
    // 2038-01-19T12:14:07+09:00をUNIX時間に変換
+
    Console.WriteLine((new DateTimeOffset(2038, 01, 19, 12, 14, 07, new TimeSpan(+09, 00, 00))).ToUnixTimeSeconds());
+

          
+
    Console.WriteLine();
+

          
+

          
+

          
+
    // UNIX時間からDateTimeOffsetへの変換
+
    Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(1000000000L));
+

          
+
    // UNIX時間からローカル時間に変換
+
    Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(1000000000L).ToLocalTime());
+

          
+
    // 64ビット符号付き整数の最大値を変換
+
    Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds((long)int.MaxValue));
+
    Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds((long)int.MaxValue).ToLocalTime());
+
  }
+
}
+
}}
+
#tabpage(codelang=vb)
+
#code{{
+
Imports System
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    ' DateTimeOffsetからUNIX時間への変換
+
    Dim dto As New DateTimeOffset(2009, 02, 13, 23, 31, 30, New TimeSpan(+00, 00, 00))
+

          
+
    Console.WriteLine(dto.ToUnixTimeSeconds())
+

          
+
    ' 2038-01-19T03:14:07+00:00をUNIX時間に変換
+
    Console.WriteLine((New DateTimeOffset(2038, 01, 19, 03, 14, 07, New TimeSpan(+00, 00, 00))).ToUnixTimeSeconds())
+

          
+
    ' 2038-01-19T12:14:07+09:00をUNIX時間に変換
+
    Console.WriteLine((New DateTimeOffset(2038, 01, 19, 12, 14, 07, New TimeSpan(+09, 00, 00))).ToUnixTimeSeconds())
+

          
+
    Console.WriteLine()
+

          
+

          
+

          
+
    ' UNIX時間からDateTimeOffsetへの変換
+
    Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(1000000000L))
+

          
+
    ' UNIX時間からローカル時間に変換
+
    Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(1000000000L).ToLocalTime())
+

          
+
    ' 32ビット符号付き整数の最大値を変換
+
    Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(CLng(Integer.MaxValue)))
+
    Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(CLng(Integer.MaxValue)).ToLocalTime())
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
#prompt(出力例){{
+
1234567890
+
2147483647
+
2147483647
+

          
+
2001/09/09 1:46:40 +00:00
+
2001/09/09 10:46:40 +09:00
+
2038/01/19 3:14:07 +00:00
+
2038/01/19 12:14:07 +09:00
+
}}
+

          
+
FromUnixTimeSecondsメソッドは指定されたUNIX時間をUTC(世界協定時)と解釈する。 戻り値として返されるDateTimeOffsetのOffsetプロパティも+00:00となる。 このため、UNIX時間をローカル時間に変換したい場合は、FromUnixTimeSecondsメソッドで得られたDateTimeOffsetに対して&msdn(netfx,member,System.DateTimeOffset.ToLocalTime){ToLocalTimeメソッド};を呼び出すことによってローカル時間に変換する必要がある。
+

          
+
FromUnixTimeSecondsメソッドでは、64ビット整数で表されるUNIX時間を扱うことができる。 そのため2038年以降の日時を表すUNIX時間を扱うこともできるが、一方DateTimeOffsetで扱える範囲外の日時へ変換しようとした場合は例外&msdn(netfx,type,System.ArgumentOutOfRangeException){ArgumentOutOfRangeException};がスローされる。 (DateTimeOffsetで扱える日時の最大値・最小値: [[programming/netfx/basic_types/0_characteristics#SizeRange]])
+

          
+
ミリ秒単位のUNIX時間を扱いたい場合は、&msdn(netfx,member,System.DateTimeOffset.ToUnixTimeMilliseconds){ToUnixTimeMilliseconds};および&msdn(netfx,member,System.DateTimeOffset.FromUnixTimeMilliseconds){FromUnixTimeMilliseconds};を使うことができる。
+

          
+
なおDateTime構造体にはこのようなUNIX時間との相互変換を行うメソッドは用意されていない。
+

          
+
*.NET Framework 4.5以前
+
上記のようなメソッドが用意されないため、独自に変換処理を実装する必要がある。
+

          
+
**変換方法と実装
 
UNIX時間は「unix epoch(''UTCでの''1970年1月1日 午前0時00分00秒)からの経過秒数」と定義される。 そのため、unix epochの日時を設定したDateTime型インスタンスを用意しておき、それに対してUNIX時間の値を秒数として足す(&msdn(netfx,member,System.DateTime.AddSeconds){DateTime.AddSeconds};)ことでDateTime型の値に変換することができる。
UNIX時間は「unix epoch(''UTCでの''1970年1月1日 午前0時00分00秒)からの経過秒数」と定義される。 そのため、unix epochの日時を設定したDateTime型インスタンスを用意しておき、それに対してUNIX時間の値を秒数として足す(&msdn(netfx,member,System.DateTime.AddSeconds){DateTime.AddSeconds};)ことでDateTime型の値に変換することができる。
 

        

        
 
同様にDateTime型からUNIX時間を求めるには、&msdn(netfx,member,System.DateTime.ToUniversalTime){DateTime.ToUniversalTimeメソッド};で''時刻をUTCに変換してから''unix epochとの差をとり(&msdn(netfx,member,System.DateTime.Subtract){DateTime.Subtract};)、その差を秒数として取得することでUNIX時間に変換することができる。
同様にDateTime型からUNIX時間を求めるには、&msdn(netfx,member,System.DateTime.ToUniversalTime){DateTime.ToUniversalTimeメソッド};で''時刻をUTCに変換してから''unix epochとの差をとり(&msdn(netfx,member,System.DateTime.Subtract){DateTime.Subtract};)、その差を秒数として取得することでUNIX時間に変換することができる。