为何Java中当前日期无法正确获取? 采用Calendar类和Date类都无法得到正确的时间,比如当前机器时间为2008-03-11 13:35:30,但是当用Java获取并输出时间得到的却是:2008-03-11 05:32:40 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我采用的环境是eclipse3.2,JDK.1.6_02,效果的确是这样的, 我很郁闷:( 代码:System.out.println(new Date(System.currentTimeMillis()).toString());System.out.println(new java.sql.Timestamp(new Date().getTime()));结果(刚执行的,右下角显示13:56): Mar 11 05:56:04 GMT 20082008-03-11 05:56:04.421 这个问题,在这里也出现过好多次,但是具体的原因尚不清楚,可能与安装有关。用下面这个程序测试一下,如果 timezone 为空,说明使用系统默认的时区:public class Test { public static void main(String[] args) { String timezone = System.getProperty("user.timezone"); System.out.println("timezone=" + timezone); }} 我这里显示timezone=GMT,这应该是标准时间 我通过Access数据库的now函数得到的就是正确的,只有Java环境得不到正确值,用.NET也是正确的 机器时区设置问题你双击右下角时间,把时区改成GMT+8 采用CST时间相差一个小时,没有那么大 这个行不 public static String getNow() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strMonth = ""; try { strMonth = sdf.format(new Date()); } catch (Exception ex) { ex.printStackTrace(); } finally { sdf = null; } return strMonth.trim(); }输出:2008-03-11 14:12:01 出来的 GMT 是标准时间,而不是中国的东8区(GMT+0800)时间或者空,正常情况下应该是空的。而且这个系统参数是在安装时产生的,也没有办法更改(不知道是从哪里获得的),估计与你的 JDK 安装有关。 int standardGMT = 8; // for China String[] ids = TimeZone.getAvailableIDs(standardGMT * 60 * 60 * 1000); SimpleTimeZone pdt = new SimpleTimeZone(standardGMT * 60 * 60 * 1000, ids[0]); Calendar date = new GregorianCalendar(pdt); java.util.Date trialTime = new java.util.Date(); date.setTime(trialTime); System.out.println(date.getTime());这样试一下 没用的,要不你每次执行前比较麻烦地在最前面加一行代码:System.setProperty("user.timezone", ""); 方法都用了,问题还存在,我重新安装一个JDK最新版本呢看看 就是时区问题呀,正好差8个小时。我做J2ME的,在电脑上取到的时间就是差8个小时,但是在手机上是正常的。 会不会是包引入的错了哦!!java.util 这个包应该没有问题! 时区问题楼主用toLocaleString()测试一下 多谢个位帮助,问题已经解决,的确是时区问题,在我的机器上环境参数user.timezone=GMT,在程序中我设置其值为Asia/Shanghai即可正确显示时间了 我第一次用的时候也对这个问题很困惑,后来仔细的看看书本,这个是GMT时间。我们在+8区,所应该加8。 hog hog hog hog hog hog hog hog hog hog hog hog hog hog hog hog hog hog hog hog 关于finally java 文本显示 遇到一个关于类加载的问题 关于无包名类的导入问题 我的作业又要做的(图形方面的) 有谁写过将二进制的数据流与字符串相互转换的类 一道题目,请教?(类相关 送100分) 救命啊, linux 下java访问mysql…… 语言学习太“费劲” jar的Manifest问题 菜鸟,求助一道题 为什么我写的代码设置好了菜单功能却不能显现出菜单?
System.out.println(new Date(System.currentTimeMillis()).toString());
System.out.println(new java.sql.Timestamp(new Date().getTime()));
结果(刚执行的,右下角显示13:56):
Mar 11 05:56:04 GMT 2008
2008-03-11 05:56:04.421
public static void main(String[] args) {
String timezone = System.getProperty("user.timezone");
System.out.println("timezone=" + timezone);
}
}
你双击右下角时间,把时区改成GMT+8
public static String getNow()
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strMonth = "";
try
{
strMonth = sdf.format(new Date());
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
sdf = null;
}
return strMonth.trim();
}
输出:2008-03-11 14:12:01
出来的 GMT 是标准时间,而不是中国的东8区(GMT+0800)时间或者空,正常情况下应该是空的。而且这个系统参数是在安装时产生的,也没有办法更改(不知道是从哪里获得的),估计与你的 JDK 安装有关。
String[] ids = TimeZone.getAvailableIDs(standardGMT * 60 * 60 * 1000);
SimpleTimeZone pdt = new SimpleTimeZone(standardGMT * 60 * 60 * 1000, ids[0]);
Calendar date = new GregorianCalendar(pdt);
java.util.Date trialTime = new java.util.Date();
date.setTime(trialTime);
System.out.println(date.getTime());
这样试一下
java.util 这个包应该没有问题!
楼主用toLocaleString()测试一下