アプリケーションを米国でホストしています。サーバーのタイムゾーンはGMTです。今、人々が世界中からこのアプリケーションにアクセスしたとき、私はそれがアクセスされた国/地域のタイムゾーンを取得したいと思います。説明-私はヨーロッパのどこかからアクセスしています。その特定の地域のタイムゾーンを取得したいと思います。これをJavaで実行したいと思います。
4 に答える
あなたがこの質問に自分で答えることができると私は信じているので、あなたが実際に何を求めているのか完全にはわかりません。
ここに記載されているように、httpリクエストから直接タイムゾーンを取得することはできません。
Spring MVCのHttpServletRequestオブジェクトからユーザーのタイムゾーンを取得する別の方法はありますか?
ただし、IPアドレスで判別できます。ここで言及:
着信httpリクエストの地理的位置をプログラムで見つける方法は?
getTimeZoneOffset()を使用することもできます。ここで言及:
ユーザーは別の国からログインするため、現地時間にトランザクションを表示する必要があります。
登録でユーザーにgmtまたは国コードの入力を求める(そしてそれからgmtを計算する)のはまだ簡単なようです。
最初に、クライアントのIPアドレスを地理的な場所にマッピングする必要があります。
この情報を持っているデータベースはかなりたくさんあります。
たとえば、IPアドレスのさまざまな場所情報へのマッピング情報を持つデータベースであるDB-IPを見てください。
データをローカルデータベースにロードし、呼び出し元のIPアドレスを使用してクエリを実行できます。(HttpRequest
Javaサーブレットを使用している場合は、これがあります。)
商用バージョンのデータベース($ 90)にもタイムゾーンがあります。
他の可能性には、IP2LocationなどのWebサービスの使用が含まれます。クライアントからリクエストがあった場合は、サービスにデータをリクエストします。もちろん、これは遅くなる可能性があり、リモートサービスの可用性に依存します。
他にもデータベースやサービスがありますので、ニーズに合ったものを見つけてください。
無料でタイムゾーン情報が含まれているものは見つかりませんでした。より大きな国になると、国の情報は確かに十分ではありません。
あなたが取ることができる2つのアプローチ:
- プラットフォーム設定を検出する
- IPジオコーディング
アプローチ1は、これにjavascriptを使用することです。ここで見つけたモジュールを使用して、良い結果が得られました。「ジャンプページ」でこれに似たコードを使用しました。このコードは、タイムゾーンを取得してから、ログインフローでリダイレクト(タイムゾーンをパラメーターとして渡す)します。
<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ジオロケーションをいじるよりもはるかに簡単であり、ほとんどの人はコンピューター/デバイスを「正しい」タイムゾーンに設定しているため、ほとんどの場合正しいでしょう。
まず、クライアントのタイムゾーンを見つける必要があります。
次に、タイムゾーンに従って、次のように時間を取得する必要があります。
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;
}