简体   繁体   中英

How to detect the timezone of a client?

如何在jsp中获取客户端/请求时区?

Unfortunately this information is not passed in HTTP headers.

Usually you need cooperating JavaScript to fetch it for you.
Web is full of examples, here is one http://www.coderanch.com/t/486127/JSP/java/Query-timezone

you cannot get timezone, but you can get current time from client side.ie through javascript and than post back. On server side, you can convert that time to GMT/UTC. The UTC shows the TimeZone.

If you just need the local timezone in order to display local times to the user, I recommend representing all times in your service in UTC and rendering them in browsers as local times using Moment.js .

My general rule is to handle and store times in UTC everywhere except at the interface with the user, where you convert to/from local time. The advantage of UTC is that you never have to worry about daylight-saving adjustments.

Note that if you want to show the age of something (eg "posted 3 hours ago") you just need to compare the UTC timestamp with the current UTC time; no need to convert to local times at all.

Best solution for me is sending date/time as a string, and then parse with server's timezone to get a timestamp. Timestamps are always UTC (or supposed to be) so you will not need client's TimeZone.

For example, sending "10/07/2018 12:45" can be parsed like:

SimpleDateFormat oD = new SimpleDateFormat();
oD.applyPattern("dd/MM/yyyy HH:mm");
oD.setTimeZone(TimeZone.getDefault()); // ;)
Date oDate = oD.parse(request.getParameter("time"));

Obviously you can set your specific date/time format.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM