如何获取国际标准时间

为了制作奥运倒计时,得想个办法获得到国际标准时间。
首先想到的便是Webservices,通用,易用。
但是Flash CS3并没有提供Webservices组件。于是使用了Roading的《flash9/flash cs3(as3)通过soap访问Web Services》
好了,方法有了,那么Service源呢,这个变难了,找了几个提供Webservices的网站
如:

http://www.webservicex.net/

http://www.webservices.org/

但都未找到这项服务。
继续上网冲浪…
得到了《获取Nist的美国官方标准时间的解决办法》
作者用的是C#实现的,仔细看了下,用AS3制作貌似差不多。
他使用的是http://nist.time.gov/timezone.cgi?UTC/s/0先得到标准时间,然后转为北京八区时间。
实际上有更容易的方法,就是将地址中的0换成8,就是东八区的标准时间了,也就是:
http://nist.time.gov/timezone.cgi?UTC/s/8
部分代码:
[code]
private function getTheTime():void
{
var request:URLRequest = new URLRequest("http://nist.time.gov/timezone.cgi?UTC/s/8[color=Blue]?rnd="+Math.random());
request.contentType = "text/xml";
request.method = URLRequestMethod.POST;
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loadComplete);
try
{
loader.load(request);
}
catch (error:Error)
{
trace("Load Error!");
}
}
private function loadComplete(event:Event):void
{
var result:String = String(loader.data);
trace(result);
}
[/code]
代码中的[color=Blue]rnd=”+Math.random()是用来防止Flash读取缓存,得不到最新数据
loadComplete方法中的result就是得到的网页源码,通过字串匹配就可得到时间字符串了.
OK,回过头来接着研究Webservices。找到了http://www.worldtimeserver.com。
(http://www.worldtimeserver.com/current_time_in_CN.aspx也可以访问这个页,使用上面的方法提取出北京时间)
使用Roading的方法:
[code]
private function getTheTime2():void
{
var soap:Namespace = new Namespace("http://schemas.xmlsoap.org/soap/envelope/");
var req:URLRequest = new URLRequest("http://www.worldtimeserver.com/wtsservice/localtime.asmx?op=GetLocalDateTimeString");
req.method = URLRequestMethod.POST;
req.requestHeaders.push(new URLRequestHeader("Content-Type", "text/xml;charset=utf-8"));
req.requestHeaders.push(new URLRequestHeader("SOAPAction", "http://worldtimeserver/wtsservice/localtime/GetLocalDateTimeString"));
var rXML:XML =



;
rXML.soap::Body.appendChild(
[color=Blue]
用户名
密码
US-NY

);
req.data = rXML;
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.TEXT;
loader.addEventListener("ioError", ioSOAPError);
loader.addEventListener(Event.COMPLETE, SOAPLoaded);
loader.load(req);
}
private function ioSOAPError(event:Error):void
{
trace("Load Error!");
}
private function SOAPLoaded(d:Event):void
{
var _xml:XML = new XML(loader.data);
trace(_xml);
}
[/code]
之所以用“用户名”和“密码”来填充,因为这个站的服务是收费的。
此外,还发现了一个更容易的方法,来测试一下北京奥委会网站:http://time.beijing2008.cn/mtime.php
(不能保证此链接永久有效),嘿嘿,知道怎么用了吧。
再来测试:http://www.time.ac.cn/timeflash.asp?user=flash
返回的是一个XML格式字串,处理起来更为容易些。
这样,目前有四个地址可以得到国际标准时间
以上,有知道其他方法的可以留言补充 [smile]

12 comments to 如何获取国际标准时间

  • JoMuncher

    那敢情好。。

    [Reply]

  • auzn

    嗯,没什么,呵呵。
    我收到奥委会站长的信了,非营利性个人站可以使用~~~,呵呵

    [Reply]

  • kylin

    终于又找到一个免费JSP站点,获取时间的页面是http://www.myjavaserver.com/servlet/kys314.TimeTestServlet ,希望这个好用(原来那个就废了吧)。
    呵呵,真不好意思,在你这儿留了这么多乱七八糟的话。

    [Reply]

  • kylin

    呜呜,我的JSP空间每6小时就关机了。能帮我找一个免费的JSP空间吗?

    [Reply]

  • kylin

    谢谢夸奖.
    奥运的图标,只要是非商业目的,应该都可以用的。

    [Reply]

  • auzn

    不错不错。
    我把那个日志隐藏了,下午同学提醒我说奥运图标也许不让随便使用,已经给奥组委网站写信了,如果批准再使用,但感觉可能性不大,晚上先换成其他的体育运动图标吧,呵呵

    [Reply]

  • kylin

    auzn,我用JSP做了一个,放在http://kys314.s46.eatj.com/time.jsp了,大家需要的话也可以用啊。
    另外,你的奥运倒计时哪儿去了?

    [Reply]

  • JoMuncher

    小鑫,这奥运图标可以随便用吗?

    [Reply]

  • auzn

    呵呵,好的,遇到问题来这里,应该能帮上你的忙的

    [Reply]

  • kylin

    呵呵,我是个新手,ASP、PHP、JSP什么的都不太懂,不过我回去试试,谢谢auzn!
    另外,你的站真的非常漂亮!

    [Reply]

  • auzn

    嗯 是会有跨域安全问题,你可以在你的站上放一个如ASP、PHP、JSP等服务端文件, 取到http://www.time.ac.cn/timeflash.asp?user=flash的内容,然后再传给FLASH~~~

    [Reply]

  • kylin

    我做的时候用的是http://www.time.ac.cn/timeflash.asp?user=flash, 但传到Blog上时发现存在无法跨域访问的问题, 不知道怎么解决。

    [Reply]

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">