我用 这个 函数得到的时间是:
Sat Oct 20 12:05:56 GMT 2007
而,我系统的时间 却是 :
2007年10月20日 20:05
相差了8小时,为什么啊?? 我系统时区设置什么都是正确的阿!!! ??
new java.util.Date() 得到的时间与系统时间不一样,为什么?
答案:6 悬赏:50 手机版
解决时间 2021-01-24 18:28
- 提问者网友:练爱
- 2021-01-23 17:56
最佳答案
- 五星知识达人网友:酒醒三更
- 2021-01-23 18:16
你的这个问题系 系统 JVM的事,可以设置下时区,通过以下的语句:
import java.util.*;
TimeZone tz = TimeZone.getTimeZone("ETC/GMT-8");
TimeZone.setDefault(tz);
//显示Java能识别的系统中所有正确的时区
import java.util.*;
TimeZone tz = TimeZone.getTimeZone("ETC/GMT-8");
TimeZone.setDefault(tz);
//显示Java能识别的系统中所有正确的时区
全部回答
- 1楼网友:骨子里都是戏
- 2021-01-23 22:12
new java.util.Date()得到的是格林威治时间,我们的北京时间比它晚8个小时,因为北京在东八区
- 2楼网友:刀戟声无边
- 2021-01-23 21:17
不是呀,我用new Date得到的时间就是系统时间呀,没错呀~~~
我是这样用的
import java.util.*;
System.out.println(new Date());
- 3楼网友:一袍清酒付
- 2021-01-23 20:10
GMT就是格林威治时间的意思,你用的是Date类的默认构造方法,没有加参数,默认的构造方法就是构造一个GMT时区的时间。
- 4楼网友:末日狂欢
- 2021-01-23 19:54
new Date()的到的是JVM的时间,一般来说应该是系统时间.如果有错误,则是JVM的BUG(这个是存在的情况).
所以你可以用Locale.SIMPLIFIED_CHINESE来指定你当前的时区(这里的是中国时区).
用new SimpleDateFormat("yyyy-MM-dd",Locale.SIMPLIFIED_CHINESE)来设置你显示的效果和时区最好.
- 5楼网友:旧脸谱
- 2021-01-23 19:47
java语言中链表和双向链表的实现
cron 表达式.java.util.date 2009-04-15 00:03:04| 分类: java | 标签: |字号大中小 订阅 .
java中的时间操作不外乎这四种情况:
1、获取当前时间
2、获取某个时间的某种格式
3、设置时间
4、时间的运算
好,下面就针对这三种情况,一个一个搞定。
一、获取当前时间
有两种方式可以获得,第一种,使用date类。
j2se的包里有两个date类,一个是java.sql.date,一个是java.util.date
这里,要使用java.util.date。获取当前时间的代码如下
date date = new date();
date.gettime();
还有一种方式,使用system.currenttimemillis();
这两种方式获得的结果是一样的,都是得到一个当前的时间的long型的时间的毫秒值,这个值实际上是当前时间值与1970年一月一号零时零分零秒相差的毫秒数。
当前的时间得到了,但实际的应用中最后往往不是要用这个long型的东西,用户希望得到的往往是一个时间的字符串,比如“2006年6月18号”,或“2006-06-18”,老外可能希望得到的是“06-18-2006”,诸如此类等等。这就是下一个要解决的问题
二、获取某个时间的某种格式
获取时间的格式,需要用到一个专门用于时间格式的类java.text.simpledateformat。
首先,定义一个simpledateformat变量
simpledateformat sdf = new simpledateformat("",locale.simplified_chinese);
这个构造函数的定义如下:
simpledateformat(string pattern, locale locale)
第一个参数pattern,我们后面再解释,这里我们使用一个"",第二个参数,是用来设置时区的,这里用到了java.util.locale 这个类,这个类了面定义了很多静态变量,直接拿过来用就ok,我们把时区设置为locale.simplified_chinese,只看名字,这个静态变量的意义已经很清楚了。
接下来我们使用这个simpledateformat把当前时间格式化为一个如下格式的时间字符串“xxxx年xx月xx日_xx时xx分xx秒”,代码:
sdf.applypattern("yyyy年mm月dd日_hh时mm分ss秒");
string timestr = sdf.format(new date());
获取时间格式的函数是format,这个函数的参数是java.util.date对象,这个没有什么花头。
要说明一下的是这个pattern,所谓的模式。这里,yyyy,mm,dd等,这就是模式。
我们可以在simpledateformat的构造函数中指定模式,比如
simpledateformat sdf = new simpledateformat("yyyy-mm-dd",locale.simplified_chinese);
也可以获取时间格式的时候使用applypattern函数临时指定,上面的例子就是这样。
什么字符代表什么,这是j2se约定好的,设置模式的时候,我们可以使用约定好的字符加上任何我们想要的字符串。
j2se对字符所代表的模式的约定列表如下:
letter date or time component presentation
g era designator text
y year year
m month in year month
w week in year number
w week in month number
d day in year number
d day in month number
f day of week in month number
e day in week text
a am/pm marker text
h hour in day (0-23) number
k hour in day (1-24) number
k hour in am/pm (0-11) number
h hour in am/pm (1-12) number
m minute in hour number
s second in minute number
s millisecond number
z time zone general time zone
z time zone rfc 822 time zone 评论这张
转发至微博
转发至微博
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯