java 获得的系统时间与操作系统的时间不一致

简介:
问题:
  1.new Date() 得到的时间?和系统相差 相差8个小时
  2.eclipse控制台打印的时间与系统相差 相差8个小时
  3.log4j日志的时间与与系统相差 相差8个小时
  上述问题其实是同一个问题。
  原因: java获得的时区跟系统的时区不一样
  解决方法如下:
  1.在代码前加上下面这句话就行了:TimeZone tz =TimeZone.getTimeZone("Asia/Shanghai");TimeZone.setDefault(tz)
  2.在tomcat中修改catalina.bat文件的 set JAVA_OPTS在后面加上-Duser.timezone=GMT+08
  3.修改注册表中的默认时区改成(GMT+08:00) 北京,重庆,香港特别行政区,乌鲁木齐
  如果还不行看下:从正常的并且是相同系统的机器中导出HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Time Zones 项,然后导入到自己机器中 。
  以上三种方法都是解决方法。
  在修改时区的时候最好用代码看下JAVA获得的时区是什么时区,代码如下:
Properties props=System.getProperties();
Iteratoriter=props.keySet().iterator();
while(iter.hasNext())??Stringkey=(String)iter.next();
System.out.println(key+" = "+props.get(key));
}
  user.timezone=??就是JAVA获得的时区,然后再看 操作系统的时区。去改注册表吧。
  weblogic :
  有一个页面需要保存日期,在前台JS中DEBUG的时候都是正确的,可是存到 数据库中,就发现日期少一天,准确的说是比选择的日期早了8个小时,基本就可以确定是时区的错误,
  开始查找,数据库时区,没问题,服务器系统时区,没问题,
  最终问题居然出在weblogic的时区上面...
  weblogic是使用自带的jre,而自带的jre中默认的时区就是GMT,而中国标准时间大家都知道是GMT+8,网上有说去改weblogic自带jre中的GMT文件,把GMT8改成GMT,但总觉得这样不是很好,如果有需要使用GMT标准时间的时候会有出问题的风险
  于是从weblogic的启动脚本上下手
  修改 domians/project/bin/startWebLogic.cmd
  找到类似
  Xml代码
  set JAVA_OPTIONS=%JAVA_OPTIONS%
  [xml] view plaincopy
  set JAVA_OPTIONS=%JAVA_OPTIONS%
  在最后面加上 -Duser.timezone=GMT+8 即设置时区为GMT+8 也可写为 Asia/shanghai
  修改之后为
  Xml代码
  set JAVA_OPTIONS=%JAVA_OPTIONS% -Duser.timezone=GMT+8
  [xml] view plaincopy
  set JAVA_OPTIONS=%JAVA_OPTIONS% -Duser.timezone=GMT+8
  保存,重新启动weblogic,问题解决
  文件查找:startWebLogic.cmd
   unix搜索命令:
  find / -name mk/表示查找目录,也可以具体到某个目录以提高效率-name表示以文件名查找
  设置默认时区:
  TimeZone tz =TimeZone.getTimeZone("Asia/Shanghai");
  TimeZone.setDefault(tz);
  Date date=new Date();
  String str=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
  System.out.println(str);

 设置时间格式的时区:
  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd kk:mm:ss ");
  sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
  Date d = new Date();
  System.out.println(sdf.format(d));
  设置日历的时区:
Calendar now = Calendar.getInstance();
now.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));//important
System.out.println(now.get(Calendar.YEAR));
System.out.println(now.get(Calendar.MONTH));
System.out.println(now.get(Calendar.DAY_OF_MONTH));
System.out.println(now.get(Calendar.HOUR_OF_DAY));
  设置时间格式的时区:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
formatter.setTimeZone(TimeZone.getTimeZone("GMT+8"));
Date currTime = new Date();
String thisTime = new String(formatter.format(currTime));
System.out.println("GMT+8:"+thisTime);
  系统时区:
  String tzId = TimeZone.getDefault().getID();
  System.out.println("TimeZone.getDefault().getID():"+tzId);
  系统时区:
  String zone = System.getProperty("user.timezone");
  System.out.println("user.timezone:"+zone);   


最新内容请见作者的GitHub页:http://qaseven.github.io/
   
目录
相关文章
|
Java Linux Windows
在Windows操作系统上运行Java程序
在Windows操作系统上运行Java程序
115 2
|
6月前
|
Kubernetes Java Linux
Linux|操作系统|Error: Could not create the Java Virtual Machine 报错的解决思路
Linux|操作系统|Error: Could not create the Java Virtual Machine 报错的解决思路
1445 0
|
19天前
|
设计模式 算法 安全
实时操作系统(RTOS)深度解析及Java实现初探
【10月更文挑战第22天】实时操作系统(RTOS,Real-Time Operating System)是一种能够在严格的时间限制内响应外部事件并处理任务的操作系统。它以其高效、高速、可靠的特点,广泛应用于工业自动化、航空航天、医疗设备、交通控制等领域。本文将深入浅出地介绍RTOS的相关概念、底层原理、作用与功能,并探讨在Java中实现实时系统的方法。
50 1
|
3月前
|
消息中间件 算法 Java
深入浅出操作系统:进程管理的艺术掌握Java中的异常处理机制
【8月更文挑战第30天】在数字世界的舞台上,操作系统扮演着导演的角色,精心安排着每一个进程的表演。本文将揭开进程管理的神秘面纱,从进程的诞生到终结,探究它们如何在操作系统的指挥下和谐共舞。通过生动的比喻和直观的代码示例,我们将一同走进操作系统的核心,理解进程调度、同步与通信的内在机制,以及它们对计算生态的重要性。让我们跟随代码的节奏,一起感受操作系统的魅力吧!
|
3月前
|
存储 安全 Java
深入理解操作系统:从用户空间到内核空间的旅程深入浅出Java异常处理机制
【8月更文挑战第28天】在数字世界的海洋中,操作系统是承载软件与硬件沟通的巨轮。本文将揭开操作系统神秘的面纱,通过一次思维的航行,带领读者从应用程序的用户空间出发,穿越系统调用的大门,深入内核空间的心脏。我们将探索进程管理、内存分配、文件系统等核心概念,并借助代码示例,揭示操作系统背后的魔法。准备好了吗?让我们启航,去发现那些隐藏在日常计算活动背后的秘密。 【8月更文挑战第28天】在Java编程世界中,异常处理就像是我们生活中的急救包。它不仅保护程序不因意外而崩溃,还确保了代码的健壮性和可靠性。本文将通过简洁明了的语言和生动的比喻,带你了解Java异常处理的奥秘,从基本的try-catch语
|
5月前
|
IDE Oracle Java
Java 是一种跨平台的编程语言,可以在各种操作系统上运行。
Java 是一种跨平台的编程语言,可以在各种操作系统上运行。
|
6月前
|
安全 Java 程序员
深入理解Java并发编程:从基础到高级深入理解操作系统中的进程调度策略
【5月更文挑战第29天】 Java并发编程是Java开发中不可忽视的一部分,它涉及到多线程、同步、锁等概念。本文将带你从Java并发编程的基础概念出发,逐步深入到高级应用,让你全面掌握Java并发编程的技巧。
|
6月前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化移动应用开发的未来:跨平台框架与原生操作系统的融合
【5月更文挑战第29天】在Java开发中,并发编程是一个重要的议题。随着多核处理器的普及,如何充分利用多核资源,提高程序的执行效率,同时保证数据的安全性和一致性,成为开发者必须面对的挑战。本文将从线程安全的基本概念出发,探讨Java中的线程安全问题,并介绍一些常见的解决方案,如同步机制、锁优化等。最后,我们将通过实例分析,展示如何在保证线程安全的前提下,进行性能优化。
|
6月前
|
存储 Java 调度
Java多线程基础-1:通俗简介操作系统之进程的管理与调度
操作系统是一个复杂的软件,具备许多功能。其中,进程的管理与调度是与我们密切相关的。本文将对操作系统功能中进程管理与调度作出介绍。
63 0
|
6月前
|
Java 开发工具
2023全网最详细的银河麒麟操作系统,Java运行环境【jdk】安装
2023全网最详细的银河麒麟操作系统,Java运行环境【jdk】安装
813 0
下一篇
无影云桌面