我正在尝试将系统的当前日期和时间转换为整数值,然后将其添加到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);
?>
答案 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;
}