如何获取用于HTML,CSS和JavaScript的三星SmartTV应用程序的当前时间?Samsung SmartTV获取当前时间
问题出在Javascript Date
对象。当我在Web环境上调用new Date()
时,我收到带有当前时间的系统日期值。但是当我在SmartTV上实例化日期时,它返回不正确的结果。我期望与网络上的行为相同。在电视设置中,时间设置为自动确定。
只有在第一次电视机启动时手动设置时区时,才会返回正确的时间。我想这是三星SmartTV平台的缺陷。
如何获取用于HTML,CSS和JavaScript的三星SmartTV应用程序的当前时间?Samsung SmartTV获取当前时间
问题出在Javascript Date
对象。当我在Web环境上调用new Date()
时,我收到带有当前时间的系统日期值。但是当我在SmartTV上实例化日期时,它返回不正确的结果。我期望与网络上的行为相同。在电视设置中,时间设置为自动确定。
只有在第一次电视机启动时手动设置时区时,才会返回正确的时间。我想这是三星SmartTV平台的缺陷。
我有同样的问题。三星智能电视上的new Date()
没有按照当前设置获得时间,而是获得底层系统时间。它总是返回一个UTC时间戳。
幸运的是,有一个API函数GetEpochTime()
,它允许您(排序)修复它。
下面是我使用的是三星的平台代码:
(function (OldDate) {
// Get a reference to Samsung's TIME API
var time = document.createElement('object');
time.setAttribute('classid', 'clsid:SAMSUNG-INFOLINK-TIME');
document.body.appendChild(time);
// Replace the existing Date() constructor
window.Date = function (a, b, c, d, e, f, g) {
switch (arguments.length) {
case 0:
return new OldDate(time.GetEpochTime() * 1000);
case 1: return new OldDate(a);
case 2: return new OldDate(a, b);
case 3: return new OldDate(a, b, c);
case 4: return new OldDate(a, b, c, d);
case 5: return new OldDate(a, b, c, d, e);
case 6: return new OldDate(a, b, c, d, e, f);
case 7: return new OldDate(a, b, c, d, e, f, g);
}
};
// Copy static function properties
Date.now = function() { return time.GetEpochTime() * 1000; };
Date.UTC = OldDate.UTC;
Date.parse = OldDate.parse;
})(Date);
new Date()
现在工作正常,我的2013三星智能电视上显示当前时间。但是,将时间戳与当前时间进行比较时可能仍然存在问题。
在大多数情况下,电视上的时间是正确的,它只是在不同的时区。
例如,此时我有2台设备在我附近,LG电视显示日期为GMT + 3,三星显示为GMT + 1。两个设备显示正确的时间。
如果您需要与特定的时间段来显示它,你可以add time zone offset to date:
var date = new Date();
var offset = 4 * 3600000;//Moscow(GMT+4)
var userOffset = date.getTimezoneOffset() * 60000;
var fixedTime = new Date(date.getTime() + offset + userOffset);
如果内部时钟电视是不可靠的,你可以使用web-services to get current time。
据我所知,我可以硬编码+ N小时,但我需要时区的支持。 – Andrei
如果你的应用程序中有服务器端,你可以尝试通过IP地址猜测时区。 http://stackoverflow.com/questions/743505/how-to-get-time-zone-through-ip-address-in-php –
我不认为它会太宽泛。亲爱的安德烈,也许如果你插入一些代码示例...并投票重新打开你自己的问题。 – peterh