Получить смещение часового пояса из заголовков запросов Google App Engine? - PullRequest
0 голосов
/ 24 апреля 2018

Согласно гибкая документация Google App Engine , для любого входящего запроса в качестве службы приложения App Engine добавляет следующие заголовки ко всем запросам:

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?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Вы можете получить смещение часового пояса, используя информацию гибких заголовков App Engine. Используйте этот код, который я создал на основе App Engine гибкий Java быстрый запуск , чтобы извлечь и проверить информацию заголовков:

 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 . Найдите пример здесь , который его использует.

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

Обратите внимание, что вы должны преобразовать заголовки в ZoneId четкую строку, добавляя континент перед городом. Вы можете прочитать ключ континента на основе типа города, содержащего их в Map из List, используя HashMap , с континентами в качестве ключей и городами в списках, каждый список назначен одному континенту.

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

0 голосов
/ 27 апреля 2018

Добавьте ниже к pom.xml

  <dependency>
    <groupId>net.iakovlev</groupId>
    <artifactId>timeshape</artifactId>
    <version>2018d.1</version>
  </dependency>

И затем запустите ниже тип кода

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;
    }
}

Результат будет

Optional[Asia/Kolkata]

Вы можете получитьваши текущие координаты, используя

https://mylocationtest.appspot.com/

...