Utils.java revision 3e9818e0267619fecebd55095ab26c53eff92e93
1b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein/* 2b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * Copyright (C) 2013 The Android Open Source Project 3b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * 4b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * Licensed under the Apache License, Version 2.0 (the "License"); 5b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * you may not use this file except in compliance with the License. 6b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * You may obtain a copy of the License at 7b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * 8b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * http://www.apache.org/licenses/LICENSE-2.0 9b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * 10b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * Unless required by applicable law or agreed to in writing, software 11b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * distributed under the License is distributed on an "AS IS" BASIS, 12b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * See the License for the specific language governing permissions and 14b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein * limitations under the License. 15b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein */ 16b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein 17b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzsteinpackage com.android.datetimepicker; 18b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein 19b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzsteinimport android.os.Build; 203e9818e0267619fecebd55095ab26c53eff92e93James Kungimport android.text.format.Time; 21b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein 223e9818e0267619fecebd55095ab26c53eff92e93James Kungimport java.util.Calendar; 233e9818e0267619fecebd55095ab26c53eff92e93James Kung 243e9818e0267619fecebd55095ab26c53eff92e93James Kung/** 253e9818e0267619fecebd55095ab26c53eff92e93James Kung * Utility helper functions for time and date pickers. 263e9818e0267619fecebd55095ab26c53eff92e93James Kung */ 27b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzsteinpublic class Utils { 283e9818e0267619fecebd55095ab26c53eff92e93James Kung 293e9818e0267619fecebd55095ab26c53eff92e93James Kung public static final int MONDAY_BEFORE_JULIAN_EPOCH = Time.EPOCH_JULIAN_DAY - 3; 303e9818e0267619fecebd55095ab26c53eff92e93James Kung 313e9818e0267619fecebd55095ab26c53eff92e93James Kung static final String SHARED_PREFS_NAME = "com.android.calendar_preferences"; 323e9818e0267619fecebd55095ab26c53eff92e93James Kung 33b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein public static boolean isJellybeanOrLater() { 343e9818e0267619fecebd55095ab26c53eff92e93James Kung return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN; 353e9818e0267619fecebd55095ab26c53eff92e93James Kung } 363e9818e0267619fecebd55095ab26c53eff92e93James Kung 373e9818e0267619fecebd55095ab26c53eff92e93James Kung public static int getDaysInMonth(int month, int year) { 383e9818e0267619fecebd55095ab26c53eff92e93James Kung switch (month) { 393e9818e0267619fecebd55095ab26c53eff92e93James Kung case Calendar.JANUARY: 403e9818e0267619fecebd55095ab26c53eff92e93James Kung case Calendar.MARCH: 413e9818e0267619fecebd55095ab26c53eff92e93James Kung case Calendar.MAY: 423e9818e0267619fecebd55095ab26c53eff92e93James Kung case Calendar.JULY: 433e9818e0267619fecebd55095ab26c53eff92e93James Kung case Calendar.AUGUST: 443e9818e0267619fecebd55095ab26c53eff92e93James Kung case Calendar.OCTOBER: 453e9818e0267619fecebd55095ab26c53eff92e93James Kung case Calendar.DECEMBER: 463e9818e0267619fecebd55095ab26c53eff92e93James Kung return 31; 473e9818e0267619fecebd55095ab26c53eff92e93James Kung case Calendar.APRIL: 483e9818e0267619fecebd55095ab26c53eff92e93James Kung case Calendar.JUNE: 493e9818e0267619fecebd55095ab26c53eff92e93James Kung case Calendar.SEPTEMBER: 503e9818e0267619fecebd55095ab26c53eff92e93James Kung case Calendar.NOVEMBER: 513e9818e0267619fecebd55095ab26c53eff92e93James Kung return 30; 523e9818e0267619fecebd55095ab26c53eff92e93James Kung case Calendar.FEBRUARY: 533e9818e0267619fecebd55095ab26c53eff92e93James Kung return (year % 4 == 0) ? 29 : 28; 543e9818e0267619fecebd55095ab26c53eff92e93James Kung default: 553e9818e0267619fecebd55095ab26c53eff92e93James Kung throw new IllegalArgumentException("Invalid Month"); 563e9818e0267619fecebd55095ab26c53eff92e93James Kung } 573e9818e0267619fecebd55095ab26c53eff92e93James Kung } 583e9818e0267619fecebd55095ab26c53eff92e93James Kung 593e9818e0267619fecebd55095ab26c53eff92e93James Kung /** 603e9818e0267619fecebd55095ab26c53eff92e93James Kung * Takes a number of weeks since the epoch and calculates the Julian day of 613e9818e0267619fecebd55095ab26c53eff92e93James Kung * the Monday for that week. 623e9818e0267619fecebd55095ab26c53eff92e93James Kung * 633e9818e0267619fecebd55095ab26c53eff92e93James Kung * This assumes that the week containing the {@link Time#EPOCH_JULIAN_DAY} 643e9818e0267619fecebd55095ab26c53eff92e93James Kung * is considered week 0. It returns the Julian day for the Monday 653e9818e0267619fecebd55095ab26c53eff92e93James Kung * {@code week} weeks after the Monday of the week containing the epoch. 663e9818e0267619fecebd55095ab26c53eff92e93James Kung * 673e9818e0267619fecebd55095ab26c53eff92e93James Kung * @param week Number of weeks since the epoch 683e9818e0267619fecebd55095ab26c53eff92e93James Kung * @return The julian day for the Monday of the given week since the epoch 693e9818e0267619fecebd55095ab26c53eff92e93James Kung */ 703e9818e0267619fecebd55095ab26c53eff92e93James Kung public static int getJulianMondayFromWeeksSinceEpoch(int week) { 713e9818e0267619fecebd55095ab26c53eff92e93James Kung return MONDAY_BEFORE_JULIAN_EPOCH + week * 7; 723e9818e0267619fecebd55095ab26c53eff92e93James Kung } 733e9818e0267619fecebd55095ab26c53eff92e93James Kung 743e9818e0267619fecebd55095ab26c53eff92e93James Kung /** 753e9818e0267619fecebd55095ab26c53eff92e93James Kung * Returns the week since {@link Time#EPOCH_JULIAN_DAY} (Jan 1, 1970) 763e9818e0267619fecebd55095ab26c53eff92e93James Kung * adjusted for first day of week. 773e9818e0267619fecebd55095ab26c53eff92e93James Kung * 783e9818e0267619fecebd55095ab26c53eff92e93James Kung * This takes a julian day and the week start day and calculates which 793e9818e0267619fecebd55095ab26c53eff92e93James Kung * week since {@link Time#EPOCH_JULIAN_DAY} that day occurs in, starting 803e9818e0267619fecebd55095ab26c53eff92e93James Kung * at 0. *Do not* use this to compute the ISO week number for the year. 813e9818e0267619fecebd55095ab26c53eff92e93James Kung * 823e9818e0267619fecebd55095ab26c53eff92e93James Kung * @param julianDay The julian day to calculate the week number for 833e9818e0267619fecebd55095ab26c53eff92e93James Kung * @param firstDayOfWeek Which week day is the first day of the week, 843e9818e0267619fecebd55095ab26c53eff92e93James Kung * see {@link Time#SUNDAY} 853e9818e0267619fecebd55095ab26c53eff92e93James Kung * @return Weeks since the epoch 863e9818e0267619fecebd55095ab26c53eff92e93James Kung */ 873e9818e0267619fecebd55095ab26c53eff92e93James Kung public static int getWeeksSinceEpochFromJulianDay(int julianDay, int firstDayOfWeek) { 883e9818e0267619fecebd55095ab26c53eff92e93James Kung int diff = Time.THURSDAY - firstDayOfWeek; 893e9818e0267619fecebd55095ab26c53eff92e93James Kung if (diff < 0) { 903e9818e0267619fecebd55095ab26c53eff92e93James Kung diff += 7; 913e9818e0267619fecebd55095ab26c53eff92e93James Kung } 923e9818e0267619fecebd55095ab26c53eff92e93James Kung int refDay = Time.EPOCH_JULIAN_DAY - diff; 933e9818e0267619fecebd55095ab26c53eff92e93James Kung return (julianDay - refDay) / 7; 94b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein } 95b8f95646fc0510eebfeaa27864023d630f34090fSam Blitzstein} 96