// Copyright (C) 2006 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.ical.values;
import com.google.ical.util.TimeUtils;
/**
* days of the week enum. Names correspond to RFC2445 literals.
*
* @author mikesamuel+svn@gmail.com (Mike Samuel)
*/
public enum Weekday {
SU(0),
MO(1),
TU(2),
WE(3),
TH(4),
FR(5),
SA(6),
;
/**
* agrees with values returned by the javascript builtin Date.getDay and the
* corresponding ical.js function/method, but is one less than the Java
* Calendar's <code>DAY_OF_WEEK</code> values.
*/
public final int jsDayNum;
/**
* agrees with the java weekday values as found in java.util.Calendar.
*/
public final int javaDayNum;
Weekday(int wDayNum) {
this.jsDayNum = wDayNum;
this.javaDayNum = 1 + wDayNum;
}
private static Weekday[] VALUES = new Weekday[7];
static {
System.arraycopy(values(), 0, VALUES, 0, 7);
}
public static Weekday valueOf(DateValue dv) {
int dayIndex =
TimeUtils.fixedFromGregorian(dv.year(), dv.month(), dv.day()) % 7;
if (dayIndex < 0) { dayIndex += 7; }
return VALUES[dayIndex];
}
public static Weekday firstDayOfWeekInMonth(int year, int month) {
int result = TimeUtils.fixedFromGregorian(year, month, 1) % 7;
return VALUES[(result >= 0) ? result : result + 7];
}
public Weekday successor() {
return VALUES[(ordinal() + 1) % 7];
}
public Weekday predecessor() {
return VALUES[(ordinal() - 1 + 7) % 7];
}
}