C#Epoch时间和时区转换

时间:2015-04-25 07:22:06

标签: c# timezone epoch

将Epoch时间转换为日期的好方法是什么,但使用特定的时区

我需要检查两个日期。我在数据库中有一个日期,在x网站上有另一个日期。

我知道两个日期与yyyy-MM-dd

完全相同 例如

数据库日期为: 1398891600 = 2014-05-01

X网站日期为: 1398902400000 = 2014-05-01

C#代码"转换器"

private string DateChecker_inEPOCH(string epochdate)
        {
            if (epochdate.Length < 13)
            {
                epochdate = epochdate + "000";
            }
            DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(Convert.ToDouble(epochdate));

            string dateFormated = dt.ToString("yyyy-MM-dd");

            return dateFormated;

        }

问题是当我使用我的方法转换时,一个db日期是2014-04-30,网站日期是2014-05-01。

我使用http://www.epochconverter.com/

测试了日期

1 个答案:

答案 0 :(得分:4)

  

数据库日期是:1398891600 = 2014-05-01

     

X网站日期:1398902400000 = 2014-05-01

EpochConverter.com给了我以下结果:

1398891600000 - &gt; 2014年4月30日星期三21:00:00 GMT

1398902400000 - &gt; 2014年5月1日星期四00:00:00 GMT

所以你的代码似乎与EpochConverter.com一致。

关于时区,我会确保使用UTC存储/检索所有日期。当转换到不同的时区时,这将为您节省很多麻烦。在这种情况下,假设相对于UTC日期存储了纪元,您只需执行以下操作:

#include <iostream>

const int size = 3;

template<class T>
class vector
{
    T* v;
public:
    vector()
    {
        v = new T[size];
        for (int i = 0; i < size; i++){
            v[i] = 0;
        }
    }

    vector(const T* a)
    {
        for (int i = 0; i < size; i++){
            v[i] = a[i];
        }
    }

    T operator * (const vector& y)
    {
        T sum = 0;
        for (int i = 0; i < size; i++){
            sum += this->v[i] * y.v[i];
        }
        return sum;
    }
};

int main()
{
    int x[3] = { 1, 2, 3 };
    int y[3] = { 4, 5, 6 };
    vector<int> v1;
    vector<int> v2;
    v1 = x;
    v2 = y;
    int R = v1 * v2;
    std::cout << R;
    return 0;
}

如果您需要向最终用户显示本地时间,则可以使用以下内容:

DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(Convert.ToDouble(epochdate));