2009-11-05T19:44:25の更新内容

programming/tips/unixtime_to_datetime/index.wiki.txt

current previous
1,75 1,23
 
${smdncms:keywords,UNIX時間,DateTime}
${smdncms:keywords,UNIX時間,DateTime}
 
${smdncms:tags,api/.net,lang/vb,lang/c#}
${smdncms:tags,api/.net,lang/vb,lang/c#}
 
*UNIX時間をDateTime型に変換する
*UNIX時間をDateTime型に変換する
~
UNIX時間は「UTCでの1970年1月1日 午前0時00分00秒(unix epoch)からの経過秒数」と定義されるため、unix epochの値の入ったDateTime型のインスタンスに、UNIX時間の値を秒数として足してやればDateTime型の値として扱える。
UNIX時間は「1970年1月1日 午前0時00分00秒からの経過秒数」と定義されるため、「1970年1月1日」の値の入ったDateTime型のインスタンスに、UNIX時間の値を秒数として足してやればDateTime型の値として扱えることになる。
+
同様にDateTime型からUNIX時間を求めるには、DateTimeKindをUtcにしてからunix epochとの差をとれば、その秒数がUNIX時間となる。
 

        

        
 
#code(vb,VB.NET){{
#code(vb,VB.NET){{
~
Imports System
Dim unixTimeStamp As Integer = 1174055140
-
Dim unixDate As DateTime =
 

        

        
~
Public Module UnixTime
Console.WriteLine(unixDate.ToLongDateString() + unixDate.ToLongTimeString())
+

          
+
  Public ReadOnly UnixEpoch As DateTime= new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
+

          
+
  Public Function ToUnixTime(ByVal dateTime As DateTime) As Long
+

          
+
    If dateTime.Kind <> DateTimeKind.Utc Then dateTime = dateTime.ToUniversalTime()
+

          
+
    return CLng(dateTime.Subtract(UnixEpoch).TotalSeconds)
+

          
+
  End Function
+

          
+
  Public Function FromUnixTime(ByVal unixTime As Long) As DateTime
+

          
+
    return UnixEpoch.AddSeconds(unixTime)
+

          
+
  End Function
+

          
+
  Public Sub Main()
+

          
+
    Console.WriteLine(ToUnixTime(new DateTime(2009, 02, 13, 23, 31, 30, DateTimeKind.Utc)))
+
    Console.WriteLine(ToUnixTime(new DateTime(2038, 01, 19, 03, 14, 07, DateTimeKind.Utc)))
+
    Console.WriteLine(FromUnixTime(1000000000))
+
    Console.WriteLine(FromUnixTime(Integer.MaxValue))
+

          
+
  End Sub
+

          
+
End Module
 
}}
}}
 

        

        
 
#code(cs,C#){{
#code(cs,C#){{
~
using System;
int unixTimeStamp = 1174055140;
~

          
DateTime unixDate =;
+
public class UnixTime {
+
  public readonly static DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
 

        

        
~
  public static long ToUnixTime(DateTime dateTime)
Console.WriteLine(unixDate.ToLongDateString() + unixDate.ToLongTimeString());
+
  {
+
    if
+
      dateTime = dateTime.ToUniversalTime();
+

          
+
    return.TotalSeconds;
+
  }
+

          
+
  public static DateTime FromUnixTime(long unixTime)
+
  {
+
    return UnixEpoch.AddSeconds(unixTime);
+
  }
+

          
+
  public static void Main()
+
  {
+
    Console.WriteLine(ToUnixTime(new DateTime(2009, 02, 13, 23, 31, 30, DateTimeKind.Utc)));
+
    Console.WriteLine(ToUnixTime(new DateTime(2038, 01, 19, 03, 14, 07, DateTimeKind.Utc)));
+
    Console.WriteLine(FromUnixTime(1000000000));
+
    Console.WriteLine(FromUnixTime(int.MaxValue));
+
  }
+
}
 
}}
}}
 

        

        
 
#prompt(出力例){{
#prompt(出力例){{
~
1234567890
2007年3月16日23:25:40
+
2147483647
+
2001/09/09 1:46:40
+
2038/01/19 3:14:07
 
}}
}}