44

What might be the difference between getting datetime using

Calendar.getInstance()

vs

new GregorianCalendar()

?

Suragch
  • 484,302
  • 314
  • 1,365
  • 1,393
Oh Chin Boon
  • 23,028
  • 51
  • 143
  • 215

2 Answers2

51

Looking in the source of Calendar.getInstance():

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);    
}

So getInstance() will return a Calendar based on your default Locale and TimeZone.

user802421
  • 7,465
  • 5
  • 40
  • 63
  • 9
    It is worth noting that Android's implementation is different than this, at least in API-22 - `public static synchronized Calendar getInstance() { return new GregorianCalendar(); }` – CrimsonX Sep 14 '15 at 15:18
34

Calendar.getInstance() will give you a Calendar using the default time zone and locale, which can result in a GregorianCalendar, a BuddhistCalendar, or a JapaneseImperialCalendar.

GregorianCalendar will always give you, well, a Gregorian calendar.

João Silva
  • 89,303
  • 29
  • 152
  • 158