请问Calendar获取时间最终是调用的系统API还是由java自己实现的功能?请高人指教

解决方案 »

  1.   

    应该是系统的,java只是做了封装而已
      

  2.   

    Calendar的getTime()方法是获取你当前操作系统的时间。
    你可以这样试试。
    Calendar cal=new GregorianCalendar();
    System.out.println(cal.getTime());
    把这两句。分别在当前时间和改完系统日期之后执行。看输入的时间就可以了。
      

  3.   

    楼主这种问题,最重要的是需要掌握分析问题的方法。那么这种问题,其实直接看看源码就知道了:首先: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(),来计算当前时间的,就是系统时间了。
      

  4.   

    看怎么看了,java api的很多类还是需要操作系统api的。Calendar也需要。
    具体实现逻辑可参考源码。
      

  5.   

    获取的是你系统的时间。也就是jvm所在主机的时间。更深入的些就是默认情况下,取你所在时区的时间到1970年1月1日的毫秒数。这样的话即使换时区,但是偏差不变,所显示出来的时间也是正确的