当前位置:编程学习 > JAVA >>

求教,Java里的Calendar类问题

请问Calendar获取时间最终是调用的系统API还是由java自己实现的功能?请高人指教 --------------------编程问答-------------------- 应该是系统的,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日的毫秒数。这样的话即使换时区,但是偏差不变,所显示出来的时间也是正确的
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,