2014-05-22 26 views
5

如何获取用于HTML,CSS和JavaScript的三星SmartTV应用程序的当前时间?Samsung SmartTV获取当前时间

问题出在Javascript Date对象。当我在Web环境上调用new Date()时,我收到带有当前时间的系统日期值。但是当我在SmartTV上实例化日期时,它返回不正确的结果。我期望与网络上的行为相同。在电视设置中,时间设置为自动确定。

只有在第一次电视机启动时手动设置时区时,才会返回正确的时间。我想这是三星SmartTV平台的缺陷。

+0

我不认为它会太宽泛。亲爱的安德烈,也许如果你插入一些代码示例...并投票重新打开你自己的问题。 – peterh

回答

4

我有同样的问题。三星智能电视上的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三星智能电视上显示当前时间。但是,将时间戳与当前时间进行比较时可能仍然存在问题。

3

在大多数情况下,电视上的时间是正确的,它只是在不同的时区。

例如,此时我有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

+0

据我所知,我可以硬编码+ N小时,但我需要时区的支持。 – Andrei

+0

如果你的应用程序中有服务器端,你可以尝试通过IP地址猜测时区。 http://stackoverflow.com/questions/743505/how-to-get-time-zone-through-ip-address-in-php –