responseheader没有location字段_在 Go 中使用 Time, Timezones 和 Location

本文讲述了在Go语言中如何处理XML文档中的时间与时区信息。作者通过Google和GeoNames的API获取时区ID,并展示了如何使用time.LoadLocation将时间转换到对应时区,还讨论了Go的time包和JSON处理。
摘要由CSDN通过智能技术生成

今天我遇到个问题。我在编写代码处理 NOAA 的潮汐站 XML 文档时,很快意识到我遇到了麻烦。这是一小段 XML 文档:

<timezone>LST/LDT</timezone>
<item>
<date>2013/01/01</date>
<day>Tue</day>
<time>02:06 AM</time>
<predictions_in_ft>19.7</predictions_in_ft>
<predictions_in_cm>600</predictions_in_cm>
<highlow>H</highlow>
</item>

如果您注意到 timezone 标签,它代表当地标准时间/当地日时。这是一个真实存在的问题因为您需要用 UTC 格式存储这些数据。如果没有正确的时区我就会迷失。我的生意伙伴抓了我的头后,给我看了俩个使用经纬度位置并返回时区信息的 API。很幸运,每个潮汐站我都有经纬度位置信息。

如果您打开这个网页您就能读到这个 Google's Timezone API 文档:

https://developers.google.com/maps/documentation/timezone/

这个 API 相当简单。它需要一个位置,时间戳和一个标志来识别请求的应用是否正在使用传感器(如 GPS 设备)来确定位置。

这是一个简单的 Google API 调用和响应:

https://maps.googleapis.com/maps/api/timezone/json?location=38.85682,-92.991714&sensor=false&timestamp=1331766000

{
    "dstOffset" : 3600.0,
    "rawOffset" : -21600.0,
    "status" : "OK",
    "timeZoneId" : "America/Chicago",
    "timeZoneName" : "Central Daylight Time"
}

它限制一天只能访问2500次。对于我的潮汐站初始加载,我知道我将达到这个限制,而且我不想等几天再加载所有数据。所有我的商业伙伴从 GeoNames 发现了这个 timezone API。

如果您打开这个网页您就能读到这个 GeoNames's API 文档:

http://www.geonames.org/export/web-services.html#timezone

这个 API 需要一个免费帐号,它相当快就可以设置好。一旦您激活您的帐号,为了使用这个 API您需要找到帐号页去激活您的用户名。

这是一个简单的 GeoNames API 调用和响应:

http://api.geonames.org/timezoneJSON?lat=47.01&lng=10.2&username=demo

{
    "time":"2013-08-09 00:54",
    "countryName":"Austria",
    "sunset":"2013-08-09 20:40",
    "rawOffset":1,
    "dstOffset":2,
    "countryCode":"AT",
    "gmtOffset":1,
    "lng":10.2,
    "sunrise":"2013-08-09 06:07",
    "timezoneId":"Europe/Vienna",
    "lat":47.01
}

这个 API 返回的信息多一些。而且没有访问限制但是响应时间不能保证。目前我访问了几千次没有遇到问题。

至此我们有两个不同的 web 请求能帮我们获得 timezone 信息。让我们看看怎么使用 Go 去使用 Google web 请求并获得一个返回对象用在我们的程序中。

首先,我们需

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值