src/share/classes/sun/util/calendar/LocalGregorianCalendar.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -23,16 +23,11 @@
* questions.
*/
package sun.util.calendar;
-import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;
import java.util.TimeZone;
@@ -57,36 +52,41 @@
super(zone);
}
private int gregorianYear = FIELD_UNDEFINED;
+ @Override
public Date setEra(Era era) {
if (getEra() != era) {
super.setEra(era);
gregorianYear = FIELD_UNDEFINED;
}
return this;
}
+ @Override
public Date addYear(int localYear) {
super.addYear(localYear);
gregorianYear += localYear;
return this;
}
+ @Override
public Date setYear(int localYear) {
if (getYear() != localYear) {
super.setYear(localYear);
gregorianYear = FIELD_UNDEFINED;
}
return this;
}
+ @Override
public int getNormalizedYear() {
return gregorianYear;
}
+ @Override
public void setNormalizedYear(int normalizedYear) {
this.gregorianYear = normalizedYear;
}
void setLocalEra(Era era) {
@@ -95,10 +95,11 @@
void setLocalYear(int year) {
super.setYear(year);
}
+ @Override
public String toString() {
String time = super.toString();
time = time.substring(time.indexOf('T'));
StringBuffer sb = new StringBuffer();
Era era = getEra();
@@ -115,29 +116,16 @@
return sb.toString();
}
}
static LocalGregorianCalendar getLocalGregorianCalendar(String name) {
- Properties calendarProps = null;
+ Properties calendarProps;
try {
- String homeDir = AccessController.doPrivileged(
- new sun.security.action.GetPropertyAction("java.home"));
- final String fname = homeDir + File.separator + "lib" + File.separator
- + "calendars.properties";
- calendarProps = AccessController.doPrivileged(new PrivilegedExceptionAction<Properties>() {
- public Properties run() throws IOException {
- Properties props = new Properties();
- try (FileInputStream fis = new FileInputStream(fname)) {
- props.load(fis);
- }
- return props;
- }
- });
- } catch (PrivilegedActionException e) {
- throw new RuntimeException(e.getException());
+ calendarProps = CalendarSystem.getCalendarProperties();
+ } catch (IOException | IllegalArgumentException e) {
+ throw new InternalError(e);
}
-
// Parse calendar.*.eras
String props = calendarProps.getProperty("calendar." + name + ".eras");
if (props == null) {
return null;
}
@@ -188,26 +176,31 @@
this.name = name;
this.eras = eras;
setEras(eras);
}
+ @Override
public String getName() {
return name;
}
+ @Override
public Date getCalendarDate() {
return getCalendarDate(System.currentTimeMillis(), newCalendarDate());
}
+ @Override
public Date getCalendarDate(long millis) {
return getCalendarDate(millis, newCalendarDate());
}
+ @Override
public Date getCalendarDate(long millis, TimeZone zone) {
return getCalendarDate(millis, newCalendarDate(zone));
}
+ @Override
public Date getCalendarDate(long millis, CalendarDate date) {
Date ldate = (Date) super.getCalendarDate(millis, date);
return adjustYear(ldate, millis, ldate.getZoneOffset());
}
@@ -232,26 +225,38 @@
}
ldate.setNormalized(true);
return ldate;
}
+ @Override
public Date newCalendarDate() {
return new Date();
}
+ @Override
public Date newCalendarDate(TimeZone zone) {
return new Date(zone);
}
+ @Override
public boolean validate(CalendarDate date) {
Date ldate = (Date) date;
Era era = ldate.getEra();
if (era != null) {
if (!validateEra(era)) {
return false;
}
- ldate.setNormalizedYear(era.getSinceDate().getYear() + ldate.getYear());
+ ldate.setNormalizedYear(era.getSinceDate().getYear() + ldate.getYear() - 1);
+ // If it's not the last Era, validate the date.
+ if (era != eras[eras.length - 1]) {
+ Date tmp = newCalendarDate(date.getZone());
+ tmp.setEra(era).setDate(date.getYear(), date.getMonth(), date.getDayOfMonth());
+ normalize(tmp);
+ if (tmp.getEra() != era) {
+ return false;
+ }
+ }
} else {
ldate.setNormalizedYear(ldate.getYear());
}
return super.validate(ldate);
}
@@ -264,10 +269,11 @@
}
}
return false;
}
+ @Override
public boolean normalize(CalendarDate date) {
if (date.isNormalized()) {
return true;
}
@@ -337,10 +343,11 @@
}
ldate.setNormalized(true);
return true;
}
+ @Override
void normalizeMonth(CalendarDate date) {
normalizeYear(date);
super.normalizeMonth(date);
}
@@ -358,10 +365,11 @@
/**
* Returns whether the specified Gregorian year is a leap year.
* @see #isLeapYear(Era, int)
*/
+ @Override
public boolean isLeapYear(int gregorianYear) {
return CalendarUtils.isGregorianLeapYear(gregorianYear);
}
public boolean isLeapYear(Era era, int year) {
@@ -370,10 +378,11 @@
}
int gyear = era.getSinceDate().getYear() + year - 1;
return isLeapYear(gyear);
}
+ @Override
public void getCalendarDateFromFixedDate(CalendarDate date, long fixedDate) {
Date ldate = (Date) date;
super.getCalendarDateFromFixedDate(ldate, fixedDate);
adjustYear(ldate, (fixedDate - EPOCH_OFFSET) * DAY_IN_MILLIS, 0);
}