1c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/* 2c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. 3c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 5c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * This code is free software; you can redistribute it and/or modify it 6c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * under the terms of the GNU General Public License version 2 only, as 7c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * published by the Free Software Foundation. Oracle designates this 8c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * particular file as subject to the "Classpath" exception as provided 9c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * by Oracle in the LICENSE file that accompanied this code. 10c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 11c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * This code is distributed in the hope that it will be useful, but WITHOUT 12c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * version 2 for more details (a copy is included in the LICENSE file that 15c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * accompanied this code). 16c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 17c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * You should have received a copy of the GNU General Public License version 18c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 2 along with this work; if not, write to the Free Software Foundation, 19c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 21c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * or visit www.oracle.com if you need additional information or have any 23c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * questions. 24c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */ 25c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 26c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/* 27c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Copyright (c) 2008-2012, Stephen Colebourne & Michael Nascimento Santos 28c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 29c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * All rights reserved. 30c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 31c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Redistribution and use in source and binary forms, with or without 32c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * modification, are permitted provided that the following conditions are met: 33c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 34c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * * Redistributions of source code must retain the above copyright notice, 35c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * this list of conditions and the following disclaimer. 36c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 37c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * * Redistributions in binary form must reproduce the above copyright notice, 38c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * this list of conditions and the following disclaimer in the documentation 39c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * and/or other materials provided with the distribution. 40c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 41c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * * Neither the name of JSR-310 nor the names of its contributors 42c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * may be used to endorse or promote products derived from this software 43c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * without specific prior written permission. 44c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 45c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 46c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 47c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 48c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 49c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 50c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 51c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 52c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 53c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 54c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 55c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 56c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */ 57c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 58c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerpackage test.java.time.chrono; 59c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 60c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static org.testng.Assert.assertEquals; 61c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 62c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.LocalDate; 63c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.LocalTime; 64c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.ZoneId; 65c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.ChronoLocalDate; 66c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.ChronoLocalDateTime; 67c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.ChronoZonedDateTime; 68c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.Chronology; 69c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.HijrahChronology; 70c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.HijrahDate; 71c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.ThaiBuddhistDate; 72c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.ChronoField; 73c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.ChronoUnit; 74c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.Locale; 75c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.Set; 76c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 77c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport org.testng.annotations.DataProvider; 78c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport org.testng.annotations.Test; 79c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 80c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/** 81c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Test case verify that the example code in the package-info.java compiles 82c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * and runs. 83c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */ 84c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerpublic class TestExampleCode { 85c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 86c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test 87c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_chronoPackageExample() { 88c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer // Print the Thai Buddhist date 89c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ChronoLocalDate now1 = Chronology.of("ThaiBuddhist").dateNow(); 90c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer int day = now1.get(ChronoField.DAY_OF_MONTH); 91c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer int dow = now1.get(ChronoField.DAY_OF_WEEK); 92c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer int month = now1.get(ChronoField.MONTH_OF_YEAR); 93c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer int year = now1.get(ChronoField.YEAR); 94c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer System.out.printf(" Today is %s %s %d-%s-%d%n", now1.getChronology().getId(), 95c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer dow, day, month, year); 96c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 97c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer // Enumerate the list of available calendars and print today for each 98c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer Set<Chronology> chronos = Chronology.getAvailableChronologies(); 99c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer for (Chronology chrono : chronos) { 100c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ChronoLocalDate date = chrono.dateNow(); 101c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer System.out.printf(" %20s: %s%n", chrono.getId(), date.toString()); 102c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 103c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 104c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer // Print today's date and the last day of the year for the Thai Buddhist Calendar. 105c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ChronoLocalDate first = now1 106c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer .with(ChronoField.DAY_OF_MONTH, 1) 107c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer .with(ChronoField.MONTH_OF_YEAR, 1); 108c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ChronoLocalDate last = first 109c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer .plus(1, ChronoUnit.YEARS) 110c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer .minus(1, ChronoUnit.DAYS); 111c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer System.out.printf(" %s: 1st of year: %s; end of year: %s%n", last.getChronology().getId(), 112c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer first, last); 113c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 114c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 115c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer //----------------------------------------------------------------------- 116c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer // Data provider for Hijrah Type names 117c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer //----------------------------------------------------------------------- 118c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @DataProvider(name = "HijrahTypeNames") 119c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer Object[][] data_of_ummalqura() { 120c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer return new Object[][]{ 121c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer { "Hijrah-umalqura", "islamic-umalqura"}, 122c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer }; 123c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 124c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 125c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test(dataProvider= "HijrahTypeNames") 126c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_HijrahTypeViaLocale(String calendarId, String calendarType) { 127c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer Locale.Builder builder = new Locale.Builder(); 128c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer builder.setLanguage("en").setRegion("US"); 129c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer builder.setUnicodeLocaleKeyword("ca", calendarType); 130c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer Locale locale = builder.build(); 131c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer Chronology chrono = Chronology.ofLocale(locale); 132c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer System.out.printf(" Locale language tag: %s, Chronology ID: %s, type: %s%n", 133c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer locale.toLanguageTag(), chrono, chrono.getCalendarType()); 134c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer Chronology expected = Chronology.of(calendarId); 135c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer assertEquals(chrono, expected, "Expected chronology not found"); 136c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 137c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 138c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test 139c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_calendarPackageExample() { 140c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 141c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer // Enumerate the list of available calendars and print today for each 142c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer Set<Chronology> chronos = Chronology.getAvailableChronologies(); 143c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer for (Chronology chrono : chronos) { 144c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ChronoLocalDate date = chrono.dateNow(); 145c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer System.out.printf(" %20s: %s%n", chrono.getId(), date.toString()); 146c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 147c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 148c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer // Print the Thai Buddhist date 149c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ThaiBuddhistDate now1 = ThaiBuddhistDate.now(); 150c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer int day = now1.get(ChronoField.DAY_OF_MONTH); 151c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer int dow = now1.get(ChronoField.DAY_OF_WEEK); 152c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer int month = now1.get(ChronoField.MONTH_OF_YEAR); 153c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer int year = now1.get(ChronoField.YEAR); 154c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer System.out.printf(" Today is %s %s %d-%s-%d%n", now1.getChronology().getId(), 155c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer dow, day, month, year); 156c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 157c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer // Print today's date and the last day of the year for the Thai Buddhist Calendar. 158c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ThaiBuddhistDate first = now1 159c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer .with(ChronoField.DAY_OF_MONTH, 1) 160c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer .with(ChronoField.MONTH_OF_YEAR, 1); 161c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ThaiBuddhistDate last = first 162c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer .plus(1, ChronoUnit.YEARS) 163c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer .minus(1, ChronoUnit.DAYS); 164c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer System.out.printf(" %s: 1st of year: %s; end of year: %s%n", last.getChronology().getId(), 165c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer first, last); 166c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 167c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 168c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer void HijrahExample1() { 169c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer HijrahDate hd2 = HijrahChronology.INSTANCE.date(1200, 1, 1); 170c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 171c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ChronoLocalDateTime<HijrahDate> hdt = hd2.atTime(LocalTime.MIDNIGHT); 172c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ChronoZonedDateTime<HijrahDate> zhdt = hdt.atZone(ZoneId.of("GMT")); 173c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer HijrahDate hd3 = zhdt.toLocalDate(); 174c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ChronoLocalDateTime<HijrahDate> hdt2 = zhdt.toLocalDateTime(); 175c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer HijrahDate hd4 = hdt2.toLocalDate(); 176c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 177c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer HijrahDate hd5 = next(hd2); 178c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 179c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 180c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer void test_unknownChronologyWithDateTime() { 181c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ChronoLocalDate date = LocalDate.now(); 182c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ChronoLocalDateTime<?> cldt = date.atTime(LocalTime.NOON); 183c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ChronoLocalDate ld = cldt.toLocalDate(); 184c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ChronoLocalDateTime<?> noonTomorrow = tomorrowNoon(ld); 185c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 186c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 187c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @Test 188c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer public void test_library() { 189c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer HijrahDate date = HijrahDate.now(); 190c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer HijrahDate next = next(date); 191c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer ChronoLocalDateTime<HijrahDate> noonTomorrow = tomorrowNoon(date); 192c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer HijrahDate hd3 = noonTomorrow.toLocalDate(); 193c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer System.out.printf(" now: %s, noon tomorrow: %s%n", date, noonTomorrow); 194c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 195c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 196c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer /** 197c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Simple function based on a date, returning a ChronoDate of the same type. 198c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * @param <D> a parameterized ChronoLocalDate 199c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * @param date a specific date extending ChronoLocalDate 200c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * @return a new date in the same chronology. 201c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */ 202c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @SuppressWarnings("unchecked") 203c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer private <D extends ChronoLocalDate> D next(D date) { 204c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer return (D) date.plus(1, ChronoUnit.DAYS); 205c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 206c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer 207c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer /** 208c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Simple function based on a date, returning a ChronoLocalDateTime of the 209c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * same chronology. 210c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * @param <D> a parameterized ChronoLocalDate 211c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * @param date a specific date extending ChronoLocalDate 212c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * @return a [@code ChronoLocalDateTime<D>} using the change chronology. 213c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */ 214c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer @SuppressWarnings("unchecked") 215c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer private <D extends ChronoLocalDate> ChronoLocalDateTime<D> tomorrowNoon(D date) { 216c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer return (ChronoLocalDateTime<D>) date.plus(1, ChronoUnit.DAYS).atTime(LocalTime.of(12, 0)); 217c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer } 218c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer} 219