我使用jQuery datepicker添加一个datepicker,并使用altFormat'@' - >见http://docs.jquery.com/UI/Datepicker/formatDate
// Function datepicker
$("#obsDate").datepicker({
altField: '#actualDate',
altFormat: '@', // Gives a timestamp dateformat
dateFormat: "dd-mm-yy",
showOn: "button",
buttonImage: $("#datePickerImg").val(),
buttonImageOnly: true,
});
当用户选择一个值时,将设置unix时间戳。 赞:1312840800000
这是几百万秒,所以我想做/ 1000
但是当我用C#中的函数转换时间戳时
private static DateTime ConvertFromUnixTimestamp(double timestamp)
{
var origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return origin.AddSeconds(timestamp);
}
我总是有一天更早...
我做错了什么?
更新: 当我使用javascript gettime()
的构建函数时var ts = Math.round((new Date().getTime() / 1000));
我得到了合适的时间戳......
我得到的datepicker示例: 29-08-2011 - > 1314568800。
这也是在datepicker中使用ticks(!)。
答案 0 :(得分:4)
这显然是 IS 时区问题。
getTime()
此函数返回自' epoch'以来的毫秒数,这意味着从本地计算机可以看到Unix timestamp * 1000
。
请参阅If javascript “(new Date()).getTime()” is run from 2 different Timezones。
datepicker({altFormat: '@'})
从我在jQuery
库中看到的内容,datepicker
内部使用formatDate
函数,将时区考虑在内
(我从这里开始:jQuery.datepicker.formatDate and timezone offset ...)
所以,在我的电脑上我有2个小时的差异。 我无法想出解决此问题的简单方法,但您可以尝试以下方法: datetimepicker getDate to return Date / Time in UTC format
答案 1 :(得分:0)
.NET很可能不知道它是什么时区。你必须定义它。
答案 2 :(得分:0)
关于你的代码,你必须做下一步:
private static DateTime ConvertFromUnixTimestamp(double timestamp)
{
var origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return origin.AddSeconds(timestamp - origin.getTime());
}
这是因为大多数时区的1月1日对应于大于零或一的unixtime值。因此,更准确地说,您必须设置(不添加)Datetime
对象的时间戳(如果您有一个setter)。
答案 3 :(得分:0)
Unix时间(自1970年1月1日以来的毫秒数)不如.Net DateTime精确,因此对于.Net代码的往返,或者如果与.Net DateTime比较,这是预期的精度。例如。 .Net - > Unix - > .Net可以减少这个数额。
var unixEpochPrecision = new TimeSpan(TimeSpan.TicksPerMillisecond);
这可能并不重要,但你至少应该意识到这一点。
您开始时需要UTC日期,否则您将在几小时后离开。这是有道理的,因为无论时区如何,Unix时间总是以UTC表示。如果只有.net那样。
DateTime UnixEpochBaseDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
Int64 ToUnixTime(DateTime utcValue)
{
if (utcValue.Kind != DateTimeKind.Utc)
throw new ArgumentException("Value must be in Utc.");
var result = (utcValue - UnixEpochBaseDate).Ticks / TimeSpan.TicksPerMillisecond;
return result;
}
按原样使用毫秒。这使得JavaScript也更容易编码。
DateTime ToClrDateTime(Int64 unixEpochMilliseconds)
{
var clrDateTime = UnixEpochBaseDate +
new TimeSpan(unixEpochMilliseconds * TimeSpan.TicksPerMillisecond);
return clrDateTime;
}
在JavaScript中
var date = new Date(1381367291665);