首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Google App Engine请求标头获取时区偏移量?

从Google App Engine请求标头获取时区偏移量?
EN

Stack Overflow用户
提问于 2018-04-24 23:46:26
回答 2查看 584关注 0票数 6

根据Google App Engine flexible docs,对于任何传入的请求,作为应用程序的服务,app Engine会将以下头部添加到所有请求中:

代码语言:javascript
复制
X-AppEngine-Country  as an ISO 3166-1 alpha-2 country code
X-AppEngine-Region    as an ISO-3166-2 standard
X-AppEngine-City
X-AppEngine-CityLatLong
X-Cloud-Trace-Context
X-Forwarded-For: [CLIENT_IP(s)], [global forwarding rule IP]
X-Forwarded-Proto [http | https]

有没有什么办法,我可以得到时区偏移量使用上述信息从请求头使用Java?

EN

回答 2

Stack Overflow用户

发布于 2018-04-27 17:02:53

将以下内容添加到pom.xml

代码语言:javascript
复制
  <dependency>
    <groupId>net.iakovlev</groupId>
    <artifactId>timeshape</artifactId>
    <version>2018d.1</version>
  </dependency>

然后在下面的代码类型下运行

代码语言:javascript
复制
package taruntest;

import net.iakovlev.timeshape.TimeZoneEngine;

import java.time.ZoneId;
import java.util.Optional;

public class ZoneInfo {
    public static TimeZoneEngine engine = null;
    private static Optional<ZoneId> ZoneID;

    public static void main(String[] args) {
        ZoneID = getZoneIdFromLatLong("12.971599,77.594563");
        System.out.println(ZoneID.toString());
    }

    public static Optional<ZoneId> getZoneIdFromLatLong(String latLong) {
        if (engine == null)
        {
            engine = TimeZoneEngine.initialize();
        }
        String[] latLongArr = latLong.split(",");
        double _lat = Double.parseDouble(latLongArr[0]);
        double _long = Double.parseDouble(latLongArr[1]);

        Optional<ZoneId> maybeZoneId = engine.query(_lat, _long);

        return maybeZoneId;
    }
}

结果是

代码语言:javascript
复制
Optional[Asia/Kolkata]

您可以使用以下命令获取当前坐标

https://mylocationtest.appspot.com/

票数 2
EN

Stack Overflow用户

发布于 2018-05-02 18:37:08

您可以使用App Engine flexible headers的信息来获取时区偏移。使用我基于App Engine flexible Java quickstart创建的代码来提取和检查headers信息:

代码语言:javascript
复制
 package com.example.appengine.gettingstartedjava.helloworld;

  import java.io.IOException;
  import java.io.PrintWriter;

  import javax.servlet.annotation.WebServlet;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;

   // [START example]
  @SuppressWarnings("serial")
  @WebServlet(name = "helloworld", value = "/" )
  public class HelloServlet extends HttpServlet {

      @Override
      public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
      PrintWriter out = resp.getWriter();
     out.println("Hello, world - Flex Servlet");

      String country = req.getHeader("X-AppEngine-Country");
      String region = req.getHeader("X-AppEngine-Region");
      String city = req.getHeader("X-AppEngine-City");
      Float cityLatLong = Float.valueOf(req.getHeader("X-AppEngine-CityLatLong"));   

      out.println("Country: " + country);
      out.println("Region: " + region);
      out.println("City: " + city);
      out.println("CityLatLong: " + cityLatLong);
    } 
  } 
  // [END example]

一旦定义了区域,就有一个官方的Java类来获取时区:ZonedDateTime。找到一个使用它的示例here

ZonedDateTime klDateTime = ldt.atZone(ZoneId.of("Asia/Kuala_Lumpur"));

请注意,您必须将标头转换为ZoneId易读字符串,并在城市之前添加大陆。您可以使用HashMapListMap中读取基于城市类型的大陆键,大陆作为键,列表中的城市,每个列表分配给一个大陆。

Map<String, List<String>> hm = new HashMap<String, List<String>>();

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50005903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档