/** * Copyright 2008 Matthew Corby-Eaglen * * 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 utils import org.joda.time.DateTime import org.joda.time.Period import org.joda.time.Hours import org.joda.time.format.DateTimeFormatter import org.joda.time.format.DateTimeFormat import org.groovymud.utils.WordUtils /** * * a basic calendar example. * * @author matt * */ public class MinnovarCalendar{ def static CREATION = new DateTime(2008, 3, 27, 0,0,0,0) def static MUD_CREATION_DAY = 8 // wollach def static WEEK_DAYS = ["Peleth", "Kolmar", "Dinwar", "Kilmar", "Dilmar", "Yarathwar", "Kreth", "Wollach"] def static MONTHS = [(0..23): "Boltar", (24 .. 48) : "Kevnith", (49..72) : "Sathqar", (73..99) : "Oonk", (100 .. 126) : "Tilworth", (127 .. 151) : "Yatterway", (152..175):"Diswanth"] def static SEASONS = [(0..1) : "Plancher" , (2..3) : "Sommersul", (4..6) : "Ecchel", (7..8) : "Molwinter"] def static MUD_DAYS_IN_YEAR = 175 def static MUD_HOURS_IN_DAY = 5 def static NIGHT_TIMES = ["midnight", "just after midnight", "the early hours of the morning", "night"] def static DAY_TIMES = ["dawn","early morning", "mid morning", "midday", "afternoon", "evening"] def static TIMESOFDAY = [(0..5) : "midnight", (6..15) : "just after midnight", (16..30) : "the early hours of the morning", (31..35) : "dawn", (36..45) : "early morning", (46..55) : "mid morning", (56..60): "midday", (61..75) : "afternoon", (76..85) : "evening", (86..99) : "night"] def month def weekDay def dayPart def wordMonth def dayOfMonth def season def time def year def dayOfYear def getDate(){ calculate() return """It is $weekDay the ${getOrdinalFor(dayOfMonth)} of $wordMonth, year $year. Currently it is $season time. You think it is $time.""" } void calculate(){ DateTime now = getNow(); Hours d = Hours.hoursBetween(CREATION, now); int hoursDiff = d.getHours(); // assume wollach was the creation date def mudDaysSinceCreation = (hoursDiff / MUD_HOURS_IN_DAY) def wholeDays = mudDaysSinceCreation as Integer dayPart = ((mudDaysSinceCreation - wholeDays) * 100) as Integer weekDay = WEEK_DAYS.get((MUD_CREATION_DAY + wholeDays) % WEEK_DAYS.size()) dayOfYear = wholeDays % MONTHS.keySet().size() MONTHS.eachWithIndex{it, i -> if(it.key.contains(dayOfYear)){ month = i dayOfMonth = (dayOfYear - it.key.from) + 1 wordMonth = it.value return } } SEASONS.each{key, value -> if(key.contains(month)){ season = value return } } TIMESOFDAY.each{key, value -> if(key.contains(dayPart)){ time = value return } } year = mudDaysSinceCreation / MUD_DAYS_IN_YEAR as Integer } public static String getOrdinalFor(int value) { int hundredRemainder = value % 100; if(hundredRemainder >= 10 && hundredRemainder <= 20) { return "${value}th"; } int tenRemainder = value % 10; switch (tenRemainder) { case 1: return "${value}st"; case 2: return "${value}nd"; case 3: return "${value}rd"; default: return "${value}th"; } } def getRealDate(Locale locale){ if(locale == null){ locale = Locale.getDefault() } DateTimeFormatter fmt = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"); return "The real date and time is ${fmt.withLocale(locale).print(getNow())}" } def getNow(){ return new DateTime(); } }