求教,Java里的Calendar类问题 请问Calendar获取时间最终是调用的系统API还是由java自己实现的功能?请高人指教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该是系统的,java只是做了封装而已 Calendar的getTime()方法是获取你当前操作系统的时间。你可以这样试试。Calendar cal=new GregorianCalendar();System.out.println(cal.getTime());把这两句。分别在当前时间和改完系统日期之后执行。看输入的时间就可以了。 楼主这种问题,最重要的是需要掌握分析问题的方法。那么这种问题,其实直接看看源码就知道了:首先:Calendar 本身是 abstract 的,也即是抽象类,是无法实例化的。那么研究下它的getInstance()函数吧:public static Calendar getInstance(){ Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault()); cal.sharedZone = true; return cal;}继续跟踪createCalendar()函数:private static Calendar createCalendar(TimeZone zone, Locale aLocale) { // If the specified locale is a Thai locale, returns a BuddhistCalendar // instance. if ("th".equals(aLocale.getLanguage()) && ("TH".equals(aLocale.getCountry()))) { return new sun.util.BuddhistCalendar(zone, aLocale); } else if ("JP".equals(aLocale.getVariant()) && "JP".equals(aLocale.getCountry()) && "ja".equals(aLocale.getLanguage())) { return new JapaneseImperialCalendar(zone, aLocale); } // else create the default calendar return new GregorianCalendar(zone, aLocale); }所以最终就是:GregorianCalendar,再看看其构造函数:public GregorianCalendar(TimeZone zone, Locale aLocale) { super(zone, aLocale); gdate = (BaseCalendar.Date) gcal.newCalendarDate(zone); setTimeInMillis(System.currentTimeMillis());}所以很清楚了,最终其实就是靠 System.currentTimeMillis(),来计算当前时间的,就是系统时间了。 看怎么看了,java api的很多类还是需要操作系统api的。Calendar也需要。具体实现逻辑可参考源码。 获取的是你系统的时间。也就是jvm所在主机的时间。更深入的些就是默认情况下,取你所在时区的时间到1970年1月1日的毫秒数。这样的话即使换时区,但是偏差不变,所显示出来的时间也是正确的 100分求助,关于JAVA JAWIN的一个问题,解决马上给分 JDK6新特性 ExecutorCompletionSe 大学辍学!为了做JAVA程序员。各位大虾给个建议啊。 面试题 已排序数组,用二分法查找,谁给个例子? java 高级群 QQ群号:20865144 欢迎高手加入讨论,切磋技术。 一个关于编译的问题 关于InvocationHandler与Proxy的问题 照书上打得,不知道哪里出错,改不来 怎么将JRE放在局域网内让客户端下载啊? 求大神指导Socket通信问题 我用myeclipse 8.5写了一个MenuBar,运行之后产生了中文乱码,求大神帮忙解决
你可以这样试试。
Calendar cal=new GregorianCalendar();
System.out.println(cal.getTime());
把这两句。分别在当前时间和改完系统日期之后执行。看输入的时间就可以了。
public static Calendar getInstance(){
Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
cal.sharedZone = true;
return cal;
}继续跟踪createCalendar()函数:
private static Calendar createCalendar(TimeZone zone,
Locale aLocale)
{
// If the specified locale is a Thai locale, returns a BuddhistCalendar
// instance.
if ("th".equals(aLocale.getLanguage())
&& ("TH".equals(aLocale.getCountry()))) {
return new sun.util.BuddhistCalendar(zone, aLocale);
} else if ("JP".equals(aLocale.getVariant())
&& "JP".equals(aLocale.getCountry())
&& "ja".equals(aLocale.getLanguage())) {
return new JapaneseImperialCalendar(zone, aLocale);
} // else create the default calendar
return new GregorianCalendar(zone, aLocale);
}所以最终就是:GregorianCalendar,再看看其构造函数:
public GregorianCalendar(TimeZone zone, Locale aLocale) {
super(zone, aLocale);
gdate = (BaseCalendar.Date) gcal.newCalendarDate(zone);
setTimeInMillis(System.currentTimeMillis());
}
所以很清楚了,最终其实就是靠 System.currentTimeMillis(),来计算当前时间的,就是系统时间了。
具体实现逻辑可参考源码。