将系统日期和时间转换为整数

时间:2013-12-05 04:34:41

标签: c# asp.net datetime-format

我正在尝试将系统的当前日期和时间转换为整数值,然后将其添加到List中。

代码是

List<int> _data = new List<int>();
        foreach (DataRow row in dt.Rows)
        {
            _data.Add((int)Convert.ToInt32(DateTime.Now.ToLocalTime()));
            _data.Add((int)Convert.ToInt32(row["S11"]));

        }

        JavaScriptSerializer jss = new JavaScriptSerializer();
        chartData = jss.Serialize(_data);
        Response.Write(chartData);

我收到的错误是Invalid cast from "DateTime' to 'Int32'

我希望以这种形式转换,使json看起来像[1386216561000,74]这里第一个成员是整数格式的时间,第二个是来自sql server的数据。

实际上,我要做的是与此php代码类似的内容。 代码是

<?php 
// Set the JSON header
header("Content-type: text/json");


$x = time() * 1000;
// The y value is a random number
$y = rand(0, 100);

// Create a PHP array and echo it as JSON
$ret = array($x, $y);
echo json_encode($ret);
?>

5 个答案:

答案 0 :(得分:3)

PHP time()函数返回自Unix Epoch(1970年1月1日00:00:00 GMT)以来的秒数测量的当前时间。

所以要在C#中模仿这个功能,试试这个:

private static double GetUnixEpoch(this DateTime dateTime)
{
    var unixTime = dateTime.ToUniversalTime() - 
        new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

    return unixTime.TotalSeconds;
}

用法:

var unixTime1 = DateTime.Now.GetUnixEpoch();

  

注意:GetUnixEpoch会返回double


所以你的代码应该是这样的:

List<double> _data = new List<double>();
foreach (DataRow row in dt.Rows)
{
    _data.Add(DateTime.Now.GetUnixEpoch());
    _data.Add((double)Convert.ToDouble(row["S11"]));
}

JavaScriptSerializer jss = new JavaScriptSerializer();
chartData = jss.Serialize(_data);
Response.Write(chartData);

答案 1 :(得分:3)

您需要将时间转换为Epoch time或某个参考点的某个时间跨度值。

以下是您计算纪元时间的代码:

     var timeDiff=DateTime.UtcNow - new DateTime(1970, 1, 1);
    var totaltime = timeDiff.TotalMilliseconds;

答案 2 :(得分:1)

DateTime不能隐式转换为int。考虑使用格式的ToString()。例如......

_data.Add((int)Convert.ToInt32(DateTime.Now.ToLocalTime().ToString("HHmmssfff"));

祝你好运!

答案 3 :(得分:1)

 var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
 Console.WriteLine ( Convert.ToInt64((DateTime.UtcNow - epoch).TotalSeconds));;

大纪元时间从1970年1月1日开始,我们得到当前的UTC时间并减去大纪元时间开始的日期,然后我们将该值转换为自大纪元时间以来经过的总秒数。

此外,我们将值转换为Int64,因为一旦达到2038,Int32将无法再存储总秒数。

答案 4 :(得分:1)

您可以将日期转换为 UnixTime Stamp

日期转换为UnixTimeStamp

public static double DateTimeToUnixTimestamp(DateTime dateTime)
{
    return (dateTime - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds;
}

Converta UnitTimeStamp to Date

public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
{
    // Unix timestamp is seconds past epoch
    System.DateTime dtDateTime = new DateTime(1970,1,1,0,0,0,0);
    dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
    return dtDateTime;
}