C# DateTime 和Unix时间戳 类型互换

作者:袖梨 2022-06-25

有一个textbox1和textbox2 和一个button
要求textbox1输入毫秒数以后。按button  textbox2显示时间
比如textbox1输入1248671343262 按button以后textbox2显示类似mon jul 27 13:09:03 cst 2009这样的时间

你所说的毫秒数1248671343262是将datetime对象通过方法tofiletimeutc或tofiletime转换成的windows文件时间(一个 64 位值),它表示自协调世界时 (utc) 公元 (c.e.) 1601 年 1 月 1 日午夜 12:00 以来已经过的间隔数(以 100 纳秒为一个间隔)。windows 使用文件时间记录应用程序创建、访问或写入文件的时间。
首先将其反向转换成datetime对象:
datetime dt = datetime.fromfiletimeutc(1248671343262);
也可以将其先转换成long ticks(刻度为100纳秒),
long ticks = 1248671343262 / 100;
datetime dt = new datetime(ticks);
再通过格式转换:
dt.getdatetimeformats('r')[0].tostring();
//tue, 02 jan 1601 10:41:07 gmt
再看看gmt和cst之间的区别,做些调整。

下面看unix时间戳与c# datetime时间类型互换

///


/// method for converting a unix timestamp to a regular
/// system.datetime value (and also to the current local time)
///

/// value to be converted
/// converted datetime in string format
private static datetime converttimestamp(double timestamp)
{
    //create a new datetime value based on the unix epoch
    datetime converted = new datetime(1970, 1, 1, 0, 0, 0, 0);

    //add the timestamp to the value
    datetime newdatetime = converted.addseconds(timestamp);

    //return the value in string format
    return newdatetime.tolocaltime();
}


///


/// method for converting a system.datetime value to a unix timestamp
///

/// date to convert
///
private double converttotimestamp(datetime value)
{
    //create timespan by subtracting the value provided from
    //the unix epoch
    timespan span = (value - new datetime(1970, 1, 1, 0, 0, 0, 0).tolocaltime());

    //return the total seconds (which is a unix timestamp)
    return (double)span.totalseconds;
}

相关文章

精彩推荐