当服务器的时区和用户的时区不一致的时候,应该怎么处理用户上传的时间?Java提供了一个简便的方法:
前提:服务器端知道用户的具体时区。这个可以让客户端在请求中嵌入时区信息来实现。
1. 生成一个SimpleDateFormat对象,然后通过它的setTimeZone方法把该对象的时区设置成用户的时区:比如用户来自中国,sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
2. 用SimpleDateFormat对象来parse用户上传的时间字符串,获得Date对象,然后存入数据库。此时该Date对象已经被Java按照服务器的时区做了转换。比如用户上传的时间是10点,然后服务器和用户相差一个时区,那么存入数据库的时间就是9点。
Date d = sdf.parse(value)
3. 服务器内部计算相对时间的时候,可以直接用该Date对象来和系统时间比较,无需处理。
4. 如果需要把之前存储的Date对象转换成字符串返回给用户,按照1中的方法再生成一个SimpleDateFormat并设置成用户的时区,然后调用format方法生成字符串即可
return sdf.format(d)