Paradigm Shift Design

ISHITOYA Kentaro's blog.

C#でUnixエポックタイムを取得する.

C#

DateTime.Now.Tick

の値は,0000年1月1日からの秒数.UNIX Epoch Timeは1970年1月1日で,互換性がない.
つか,Windowsでしか使わないとか,サーバーに接続しないとかならいいけど.


で,いまC#Flexをクライアント,Java(Teeda+S2Dao+Jsonic)をサーバーにしてデータのやり取りをするシステムを作っているんだけれど,取得できる時刻がバラバラでいらいらしていた.


…世の中には
Epoch Converter - Unix Timestamp Converter
とか,素晴らしいことをやってくれている人がいた.
というわけで,適当にクラスを作った.

using System;
using System.Collections.Generic;
using System.Text;

namespace com.semcode.wii.db.util
{
    public class UnixEpochTime
    {
        public const long EPOCH = 621355968000000000;
        public static long now()
        {
            return (DateTime.Now.ToUniversalTime().Ticks - EPOCH) / 10000;
        }
        public static long toUnixEpochTime(long time){
            return (time - EPOCH) / 10000;
        }
    }
}

このクラスの

UnixEpochTime.now();

で取得できる値はJavaの

new Date().getTime();

や、PHP

<?php echo time() ?>

と互換性のある値です.あー3時間くらい悩んだ.