我的申请是在美国托管的。服务器时区采用GMT格式。现在,当人们从全球各地访问此应用程序时,我想获取访问它的国家/地区的时区。说 - 我从欧洲的一些地方进入。我想获得特定地区的时区。我希望这可以用Java完成。
答案 0 :(得分:0)
我不完全确定你的实际问题,因为我相信你可以自己回答这个问题。
您无法直接从http请求获取时区,如下所述:
Is there another way to get a user's time zone from a HttpServletRequest object in Spring MVC?
但您可以通过IP地址确定它。这里提到:
How to programmatically find geo location of incoming http request?
您还可以使用getTimeZoneOffset()。这里提到:
User needs to display transaction in there local time as they login from different country.
在注册中提示用户输入gmt或国家/地区代码(并从中计算gmt)似乎仍然比较容易。
答案 1 :(得分:0)
您需要先将客户端IP地址映射到地理位置。
有很多数据库都有这些信息
例如,查看DB-IP,这是一个数据库,其中包含IP地址到各种位置信息的映射信息
您可以将数据加载到本地数据库并使用calles IP地址进行查询。 (当您使用Java Servlet时,在HttpRequest
中有这个。)
数据库的商业版本(90美元)也有时区。
其他可能性包括使用Web服务,如IP2Location。 当客户端发出请求时,您将从服务请求数据。 当然,这可能很慢,您依赖远程服务的可用性。
还有其他数据库和服务,找到适合您需求的数据库和服务。
我没有找到一个免费的,并且有时区信息。当谈到更大的国家时,国家信息肯定是不够的。
答案 2 :(得分:0)
您可以采取两种方法:
方法1是使用javascript。我使用了一个模块,我发现here效果很好。我在“跳转页面”上使用了类似于此的代码,它只是选择时区,然后在登录流程中重定向(将时区作为参数传递)。
<script type="text/javascript" src="/script/detect_timezone.js"></script>
<script type="text/javascript">
var tz_info = jstz.determine_timezone();
var timezone = tz_info.timezone;
var tz_id='';
if (timezone != 'undefined') {
timezone.ambiguity_check();
tz_id = timezone.olson_tz;
alert(tz_id); // olson timezone, e.g. "Europe/London", "Asia/Tokyo" etc.
}
</script>
这比搞乱IP地理定位容易得多,而且由于大多数人将他们的计算机/设备设置为“正确”的时区,因此大部分时间都是正确的。
答案 3 :(得分:0)
首先我们必须find the Time zone of a client。
然后根据时区我们必须按如下方式获取时间:
public String getLocalTime(String timezone) {
TimeZone tz = TimeZone.getTimeZone(timezone);
Calendar localtime = new GregorianCalendar(tz);
String strLocalTime = localtime.get(Calendar.HOUR_OF_DAY) + ":"
+ localtime.get(Calendar.MINUTE) + ":" + localtime.get(Calendar.SECOND);
return strLocalTime;
}