根据Google App Engine flexible docs,对于任何传入的请求,作为应用程序的服务,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?
发布于 2018-04-27 17:02:53
将以下内容添加到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]您可以使用以下命令获取当前坐标
发布于 2018-05-02 18:37:08
您可以使用App Engine flexible headers的信息来获取时区偏移。使用我基于App Engine flexible Java quickstart创建的代码来提取和检查headers信息:
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易读字符串,并在城市之前添加大陆。您可以使用HashMap在List的Map中读取基于城市类型的大陆键,大陆作为键,列表中的城市,每个列表分配给一个大陆。
Map<String, List<String>> hm = new HashMap<String, List<String>>();
https://stackoverflow.com/questions/50005903
复制相似问题