#author("2020-04-30T21:22:27+09:00","","")
#author("2020-04-30T21:22:54+09:00","","")
#navi(../)
* UNIX時間への変換・DateTimeOffset [#r2a51750]
DateTimeやDateTimeOffisetで持っている年月日時分秒をUNIX時間に変換する C#, Visual Basic のサンプルコードの紹介です。~
''DateTimeOffset''の''ToUnixTimeSeconds'', ''ToUnixTimeMilliseconds''を使用すると簡単にUNIX TIMEを取得できます。

#contents

* 関連サイト [#dc15e426]
-[[Microsoft .NET | DateTimeOffset 構造体>https://docs.microsoft.com/ja-jp/dotnet/api/system.datetimeoffset]]
-[[Microsoft .NET | DateTime 構造体>https://docs.microsoft.com/ja-jp/dotnet/api/system.datetime]]

#htmlinsert(windev-top.html)


* 関連記事 [#zb7234ff]
-[[UNIX時間をDateTimeOffset, DateTimeにする>.NET/UNIX時間をDateTimeOffset, DateTimeにする]]


* 動作確認環境 [#ie618693]
-Windows 10
-Visual Studio 2019
-.NET Core 3.1
-コンソールアプリケーション

#htmlinsert(windev-top.html)



* UNIX時間に変換するサンプルコード [#r1c0d3aa]
以下に C#, Visual Basicのサンプルコードと実行結果を記します。~
3つの日時をUNIX時間に変換しています。
+ DateTimeOffset に JST(日本標準時)を指定しUNIX時間を取得・表示する。
+ DateTimeOffset に UTC(協定世界時)を指定しUNIX時間を取得・表示する。
+ DateTime を DateTimeOffset にし、UNIX時間を取得・表示する。~
ローカル時間(JST)が引き継がれているのが確認できます。

** C# [#z3ede379]
 using System;
 
 class Program
 {
     static void Main(string[] args)
     {
         // JST
         TimeZoneInfo jst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
         DateTimeOffset jst1970 = new DateTimeOffset(1970, 1, 1, 0, 0, 0, jst.BaseUtcOffset);
         Console.WriteLine(
             "JST : " + jst1970.ToString() +
             ", UnixTime(Seconds): " +
             jst1970.ToUnixTimeSeconds() +
             ", UnixTime(Milliseconds): " +
             jst1970.ToUnixTimeMilliseconds());
 
         // UTC
         DateTimeOffset utc1970 = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeZoneInfo.Utc.BaseUtcOffset);
         Console.WriteLine(
             "UTC : " + utc1970.ToString() +
             ", UnixTime(Seconds): " +
             utc1970.ToUnixTimeSeconds() +
             ", UnixTime(Milliseconds): " +
             utc1970.ToUnixTimeMilliseconds());
 
         // DateTime -> DateTimeOffset
         DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0);
         DateTimeOffset dto;
         dto = dt;
         Console.WriteLine("DateTime->DateTimeOffset UnixTime(Seconds) : " + dto.ToUnixTimeSeconds());
     }
 }



** Visual Basic [#x9ca6326]
 Imports System
 
 Module Program
     Sub Main(args As String())
 
         'JST
         Dim jst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time")
         Dim jst1970 = New DateTimeOffset(1970, 1, 1, 0, 0, 0, jst.BaseUtcOffset)
         Console.WriteLine(
             "JST : " & jst1970.ToString &
             ", UnixTime(Seconds): " &
             jst1970.ToUnixTimeSeconds &
             ", UnixTime(Milliseconds): " &
             jst1970.ToUnixTimeMilliseconds)
 
         'UTC
         Dim utc1970 = New DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeZoneInfo.Utc.BaseUtcOffset)
         Console.WriteLine(
             "UTC : " & utc1970.ToString &
             ", UnixTime(Seconds): " &
             utc1970.ToUnixTimeSeconds &
             ", UnixTime(Milliseconds): " &
             utc1970.ToUnixTimeMilliseconds)
 
         'DateTime -> DateTimeOffset
         Dim dt As DateTime = New DateTime(1970, 1, 1, 0, 0, 0)
         Dim dto As DateTimeOffset
         dto = dt
         Console.WriteLine("DateTime->DateTimeOffset UnixTime(Seconds) : " & dto.ToUnixTimeSeconds)
 
     End Sub
 
 End Module

** 実行結果 [#q93b4e13]
上記サンプルコード実行結果のキャプチャになります。
#ref(run.png)

以上、DateTimeOffset の ToUnixTimeSeconds, ToUnixTimeMilliseconds を使ってUNIX時間を取得するサンプルコードの紹介でした。

#htmlinsert(windev-btm.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS