win7 系统下java 时间问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了win7 系统下java 时间问题相关的知识,希望对你有一定的参考价值。

问 题:java程序将获取的系统时间比当前时间小20个小时,例如:当前时间为2010-04-06 22:48,系统托盘时间显示也对,但java获取的当前时间却是2010-04-06 02:48。
操作系统:win7
系统时区:(UTC+08:00)北京,重庆,香港特别行政区,乌鲁木齐
jdk版本:1.5

重要说明:
(1)操作系统时区设置没问题
(2)CMOS时间正常
(3)java中获取当前日期的方法没有问题,linux下Solaris下都正确。
(4)我试了各种日期的输出方法,包括Date和Calendar,也尝试过时区的设置,但问题依旧,应该与java无关。
(5)系统托盘显示是对的,就是我用java输出时小了20小时,而且仅仅在我的电脑上是错误的。
jdk1.5我也重装过。
代码也像 hou_shaojun那样写过。而且我还试过:
DateFormat chinaFormatter=DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM,Locale.CHINA);
DateFormat defaultFormatter=DateFormat.getDateTimeInstance();
Date now=new Date();
DateFormat gmt08Formatter=DateFormat.getDateTimeInstance();
TimeZone timezone=TimeZone.getTimeZone( "GMT 08:00 ");
gmt08Formatter.setTimeZone(timezone); //格式日期/时间
String defaultDateTime=defaultFormatter.format(now);
String chinaDateTime=chinaFormatter.format(now);
String gmt08DateTime=gmt08Formatter.format(now);
System.out.print( defaultDateTime+" " +chinaDateTime+" "+ gmt08DateTime);

输出:2010-4-8 5:15:21 2010-4-8 5:15:21 2010-4-8 5:15:21
而当前时间是:2010-4-8 13:15:21 。竟然少8小时

实际上,我们中国处于东八区,所以在我们电脑上得到的日期应该是滞后八小时;
其实这是JVM的默认TimeZone类有问题引起的

/*ForTest.java*/
import java.util.TimeZone;
import java.util.Date;
import java.text.DateFormat;

public class ForTest

public static void main(String[] args)

DateFormat dateFormatterChina = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM);//格式化输出
TimeZone timeZoneChina = TimeZone.getTimeZone("Asia/Shanghai");//获取时区
dateFormatterChina.setTimeZone(timeZoneChina);//设置系统时区
Date curDate = new Date();//获取系统时间

System.out.println(dateFormatterChina.format(curDate));

参考资料:http://hi.baidu.com/jjpro/blog/item/2f807ca9a916c8f91e17a29f.html

参考技术A 我也用win7
我这代码可行。你试试
import java.text.SimpleDateFormat;

/**
* win7 java 系统时间
*
* @author H
*/
public class DateTest

public static void main(String[] args)

java.util.Date d = new java.util.Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 时间格式自己设置
System.out.println(sdf.format(d));

参考技术B 获取时间的代码贴一下吧?
如何重现你的问题?请先描诉一下。
参考技术C 换个JDK试试看.

Ubuntu18.04 + win10双系统下时间问题

Ubuntu 16.04使用systemd启动之后,时间也改成了由timedatectl来管理
解决的办法可以参考http://blog.sina.com.cn/s/blog_5379c55b0102yqvg.html
但是,前提是必须要更新一下:sudo apt-get update
技术图片

以上是关于win7 系统下java 时间问题的主要内容,如果未能解决你的问题,请参考以下文章

WIN7怎么配置环境变量JAVAHOME

win7下JAVA环境变量配置方法

WIN7 x64下java 8的环境变量配置

用java keytool工具生成keystore文件的问题

win7下的tomcat编译的java项目可不可以直接放在linux下的tomcat下运行

hbase单机模式下,使用java API远程连接hbase的问题。