最近在做国际化的项目,在开发过程中,遇到一些问题,记下来警惕自己以后注意这些问题。
1、时区问题
以泰国举例,相关数据库部署在泰国。如果在中国创建一条数据插入泰国数据库,通过时间控件选择数据的创建时间,这时获取的时间是从浏览器获取 为中国时区时间。需要把这个时间传到后端服务器,存储到数据库,但服务器的时间为泰国时区的时间。中国是东八区 泰国是东七区,相差一个小时。这就会导致两个问题:
a、创建数据:在前端选的8:00,落到数据库中就会变为7:00
b、数据查询时的错觉:在前端选择查询8点到9点创建的数据,到后端经过转换会变为查找7:00到8点的消息,返回的数据又会带有相应的时区,导致,数据的一种假象。以为查的是8点到9点创建的数据,而实际看到的是7:00到8点的消息。
问题追踪发现,前端传过来的时间,在经过java时间格式转换后会转换为对应时区的时间。(SimpleDateFormat)
时区问题解决:
1、有海外开发经历的同事说,这种问题一般数据库的时区设置为UTC时间,前端传的数据增加时区的字段,标识自己是哪个时区,后端将这个时间转为UTC时区传给数据库,同时,数据库返回的时间再转为前端需要的时区传递出去,这样会有效避免时区问题。
2、既然我们的数据库已经是当地的时区,无法改变,那一种有效的做法时,登录页面前做个选择时区的页面,用户选择切换到对应的时区,访问对应的数据源。
3、另外一种简单的做法:所有前端的时间去掉时间格式,作为字符串与后端交互。后端将时间转换为字符串传给前端,前端的时间同样处理为字符串传给后端,后端做时间处理,这样就可避免时区问题,做到前端时间可见即可得(前端展示什么,库中就是什么时间)
相关问题:
https://blog.csdn.net/persistencegoing/article/details/89946637
https://blog.csdn.net/octopusflying/article/details/79770956
2、不同语言之间 符号集 是否兼容问题 如【别的语言中是否支持