Tomcat设置默认时区
本文讲解如何在tomcat启动时设置JVM默认时区。
环境:JDK1.8.114
web容器:Tomcat 9
tomcat启动脚本 /etc/init.d/tomcat
操作系统ubuntu 16 amd64
作为java开发人员,以下代码应该不会觉有有什么意外,运行正常。
是的,他的确能正常运行。
String sql = "insert into `order`(clientid,licensestr,type,amount,`status`,months,info,createtime) values(?,?,?,?,?,?,?,?)";
try {
PreparedStatement pst = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
pst.setLong(, clientid);
pst.setString(, String.format("SN-%s",generateNextSequence()));
pst.setInt(, );
pst.setInt(, );
pst.setString(, "status/waitforlicense");
pst.setInt(, -);
pst.setString(, "");
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
pst.setString(, format.format(new Date()));
int effect = pst.executeUpdate();
if(effect>){
ResultSet rs = pst.getGeneratedKeys();
if(rs.next())
{
long last_inserted_id = rs.getLong();
return last_inserted_id;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
他会在数据库中插入的createtime是当前JVM的默认本地(Locale)时间。因为特殊需要,笔者曾经在非东八区时间(GMT+8) --北京时间 部署项目。
录入数据库的时间不是北京时间,当业务数据捞(load)上来的时候一头雾水,也与业务数据时间不一致,产生了很多烦恼。
有的小伙伴会想到以下命令(不同版本的Ubuntu命令不一样)
cp /usr/share/zoneinfo/Asia/ShangHai /etc/localtime
或
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
笔者在本地虚拟机执行以上命令就能得到正确的时间,但是笔者购买的虚拟机环境已经设置了正确的时间,
Tomcat获取的时间仍旧不对,后来笔者找到了类似(jdk1.8)代码,替换以上的createtime字段,插入的数据也是对的。
ZoneId zoneId = ZoneId.of("GMT+8");
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.now(), zoneId);
System.out.println(zonedDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
以上这段代码来自Stackoverflow:How to get local time of different time zones?
根据ZoneId.of的api说明,你还可以选择其他更多格式,例如 America/New_York,Z,UTC+01:00,GMT,GMT-2,-4等,具体可以参考ZoneId API。
当前JVM更多时区获取方法可以参考以下代码:
String[] ids = TimeZone.getAvailableIDs();
for (String id : ids) {
System.out.println(displayTimeZone(TimeZone.getTimeZone(id)));
} private static String displayTimeZone(TimeZone tz) { long hours = TimeUnit.MILLISECONDS.toHours(tz.getRawOffset());
long minutes = TimeUnit.MILLISECONDS.toMinutes(tz.getRawOffset())
- TimeUnit.HOURS.toMinutes(hours);
// avoid -4:-30 issue
minutes = Math.abs(minutes); String result = "";
if (hours > 0) {
result = String.format("(GMT+%d:%02d) %s", hours, minutes, tz.getID());
} else {
result = String.format("(GMT%d:%02d) %s", hours, minutes, tz.getID());
} return result; }
有些特殊情况下是不允许修改代码的,如没有编译环境,代码闭源等。
这个时候我们就要从JVM入手了,一个tomcat进程对应一个JVM,我们可以对这个JVM设置一些启动参数,带着这个疑问我们找到了解决方法
windows下编辑tomcat/bin/setclasspath.bat
在所有代码之前添加
set JAVA_OPTS="-Duser.timezone=GMT"
linux编辑tomcat/bin/setclasspath.sh
在所有代码之前添加
export JAVA_OPTS="-Duser.timezone=GMT"
如果设置了随机启动脚本要修改随机启动脚本
vim /etc/init.d/tomcat
export JAVA_OPTS="-Duser.timezone=GMT+8:00" 或 export JAVA_OPTS="-Duser.timezone=GMT+8"
经过以上设置,不管你的程序放到什么地方,每次获取的时间都是北京时间。
Tomcat设置默认时区的更多相关文章
- Tomcat设置默认启动项目及Java Web工程设置默认启动页面
Tomcat设置默认启动项目 Tomcat设置默认启动项目,顾名思义,就是让可以在浏览器的地址栏中输入ip:8080,就能访问到我们的项目.具体操作如下: 1.打开tomcat的安装根目录,找到Tom ...
- tomcat设置默认启动项
Tomcat设置默认启动项目 Tomcat设置默认启动项目,顾名思义,就是让可以在浏览器的地址栏中输入ip:8080,就能访问到我们的项目.具体操作如下: 1.打开tomcat的安装根目 ...
- Tomcat设置默认启动项目
Tomcat设置默认启动项目 Tomcat设置默认启动项目,顾名思义,就是让可以在浏览器的地址栏中输入ip:8080,就能访问到我们的项目.具体操作如下: 1.打开tomcat的安装根目录,找 ...
- MTK Android中设置默认时区
设置默认时区 PRODUCT_PROPERTY_OVERRIDES += \ persist.sys.timezone=Asia/Shanghai\ 注:搜索“persist.sys.timezone ...
- (原创)项目部署-Tomcat设置默认访问项目及项目重复加载问题处理
主要是通过配置<Tomcat安装目录>/conf/server.xml文件 步骤: 1.打开server.xml,在</Host>的上一行添加内容格式如下 <Contex ...
- tomcat设置默认欢迎页、server.xml配置文件中的标签理解
一:要求:输入网址,不加文件名便可以访问默认页面 (1)项目中只有静态文件 方法:更改tomcat下的conf目录下的web.xml文件,如下图: <welcom-file-list>元素 ...
- tomcat 设置默认编码格式
在tomcat目录下 conf文件夹下的server.xml中: <Connector port="80" protocol="HTTP/1.1" ...
- 我的Android进阶之旅------>Android 设置默认语言、默认时区
1. 设置默认时区 PRODUCT_PROPERTY_OVERRIDES += \ persist.sys.timezone=Asia/Shanghai\ 注:搜索“persist.sys.timez ...
- 修改PHP的默认时区
每个地区都有自己的本地时间,在网上及无线电通信中,时间的转换问题显得格外突出.整个地球分为24个时区,每个时区都有自己的本地时间.在国际无线电或网络通信场合,为了统一起见,使用一个统一的时间,成为通用 ...
随机推荐
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #17 如何使用ext4
HACK #17 如何使用ext4 本节介绍ext4的编写和挂载方法.开发版ext4的使用方法.ext4是ext3的后续文件系统,从Linux 2.6.19开始使用.现在主要的发布版中多数都是采用ex ...
- 通过yum升级gcc/g++至版本4.8.2
最近在坐一个日期处理的问题,需要安装sxtwl模块,但是gcc版本4.7死活也安装不上,最后测试到只能升级gcc版本到4.8才得以解决 [root@123 bin]# gcc -vUsing buil ...
- 配置IIS,以在局域网内访问发布的web站点
在windows 7或win8 中 配置IIS, 以在局域网内访问自己发布的web 网站或应用程序.主要配置步骤如下: 1. 打开 win7 或 win8 控制面板,选择: 打开或关闭windws 功 ...
- 显式锁(二)Lock接口与显示锁介绍
一.显式锁简介 显式锁,这个叫法是相对于隐式锁synchronized而言的,加锁和解锁都要用户显式地控制.显示锁Lock是在Java5中添加到jdk的,同synchronized一样,这也是一 ...
- shell $*与$@的区别
[root@bgx shell]# cat tt.sh #! /bin/bash test() { echo "未加引号,二者相同" echo $* echo $@ echo &q ...
- gulp css 压缩 合并
//导入工具包 require('node_modules里对应模块') var gulp = require('gulp'), //本地安装gulp所用到的地方 concat = require(' ...
- Gson 解析教程
Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson等等 本人fastJson用了两年,也是从去年才开始接触Gson,希望下面的总结会对博友有用,至于Gso ...
- VB6单片机编程中的汉字处理
在DOS时代,拥有一个华丽的汉字菜单几乎是每个高档中文应用程序必须的包装.中文Windows操作系统的出现使得高级开发平台实现全中文的提示和界面非常容易和方便.在一般的应用程序中已经很少需要去专门考虑 ...
- VB6 如何创建一个标准控制台程序
打开 VB6 并新建一个标准EXE程序,把窗口删掉,然后再加入一个模块. 在模块中加入AllocConsole.FreeConsole.SetConsoleTitle.Sleep的API声明: Pub ...
- 机器学习入门-DBSCAN聚类算法
DBSCAN 聚类算法又称为密度聚类,是一种不断发张下线而不断扩张的算法,主要的参数是半径r和k值 DBSCAN的几个概念: 核心对象:某个点的密度达到算法设定的阈值则其为核心点,核心点的意思就是一个 ...