⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timeutils.java

📁 A framework written in Java for implementing high-level and dynamic languages, compiling them into J
💻 JAVA
字号:
package gnu.xquery.util;import gnu.xml.*;import gnu.kawa.xml.*;import gnu.math.*;import gnu.mapping.WrongType;import gnu.mapping.Values;import java.math.BigDecimal;import java.math.BigInteger;import java.util.TimeZone;public class TimeUtils{  static DateTime coerceToDateTime (String fun, Object value)  {    if (XTimeType.dateTimeType.isInstance(value))      return (DateTime) value;    if (value instanceof KNode || value instanceof UntypedAtomic)      return XTimeType.parseDateTime(TextUtils.stringValue(value),                                     DateTime.DATE_MASK|DateTime.TIME_MASK);    throw new WrongType(fun, 1, value, "xs:dateTime");  }  static DateTime coerceToDate (String fun, Object value)  {    if (XTimeType.dateType.isInstance(value))      return (DateTime) value;    if (value instanceof KNode || value instanceof UntypedAtomic)      return XTimeType.parseDateTime(TextUtils.stringValue(value),                                     DateTime.DATE_MASK);    throw new WrongType(fun, 1, value, "xs:date");  }  static DateTime coerceToTime (String fun, Object value)  {    if (XTimeType.timeType.isInstance(value))      return (DateTime) value;    if (value instanceof KNode || value instanceof UntypedAtomic)      return XTimeType.parseDateTime(TextUtils.stringValue(value),                                     DateTime.TIME_MASK);    throw new WrongType(fun, 1, value, "xs:time");  }  static Duration coerceToDuration (String fun, Object value)  {    if (value instanceof Duration)      return (Duration) value;    throw new WrongType(fun, 1, value, "xs:duration");  }  static Object timeZoneFromXTime (DateTime time)  {    if (time.isZoneUnspecified())      return Values.empty;    return Duration.makeMinutes(time.getZoneMinutes());  }  static IntNum asInteger(int value)  {    return IntNum.make(value);  }  public static Object yearFromDateTime (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToDateTime("year-from-dateTime", arg).getYear());  }  public static Object monthFromDateTime (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToDateTime("month-from-dateTime", arg).getMonth());  }  public static Object dayFromDateTime (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToDateTime("day-from-dateTime", arg).getDay());  }  public static Object hoursFromDateTime (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToDateTime("hours-from-dateTime", arg).getHours());  }  public static Object minutesFromDateTime (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToDateTime("minutes-from-dateTime", arg).getMinutes());  }  static Number getSeconds (DateTime date)  {    int seconds = date.getSecondsOnly();    long nanos = date.getNanoSecondsOnly();    if (nanos == 0)      return IntNum.make(seconds);    nanos += seconds * 1000000000L;    return new BigDecimal(BigInteger.valueOf(nanos), 9);  }  public static Object secondsFromDateTime (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return getSeconds(coerceToDateTime("seconds-from-dateTime", arg));  }  public static Object timezoneFromDateTime (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return timeZoneFromXTime(coerceToDateTime("timezone-from-datetime", arg));  }  public static Object yearFromDate (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToDate("year-from-date", arg).getYear());  }  public static Object monthFromDate (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToDate("month-from-date", arg).getMonth());  }  public static Object dayFromDate (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToDate("day-from-date", arg).getDay());  }  public static Object timezoneFromDate (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return timeZoneFromXTime(coerceToDate("timezone-from-date", arg));  }  public static Object hoursFromTime (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToTime("hours-from-time", arg).getHours());  }  public static Object minutesFromTime (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToTime("minutes-from-time", arg).getMinutes());  }  public static Object secondsFromTime (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return getSeconds(coerceToTime("seconds-from-time", arg));  }  public static Object timezoneFromTime (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return timeZoneFromXTime(coerceToTime("timezone-from-time", arg));  }  public static Object yearsFromDuration (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToDuration("years-from-duration", arg).getYears());  }  public static Object monthsFromDuration (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToDuration("months-from-duration", arg).getMonths());  }  public static Object daysFromDuration (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToDuration("days-from-duration", arg).getDays());  }  public static Object hoursFromDuration (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToDuration("hours-from-duration", arg).getHours());  }  public static Object minutesFromDuration (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    return asInteger(coerceToDuration("minutes-from-duration", arg).getMinutes());  }  public static BigDecimal secondsBigDecimalFromDuration (long s, int n)  {    if (n == 0)      return BigDecimal.valueOf(s);    int scale = 9;    // A simple way to make sure s * 1000000000L doesn't overflow:    boolean huge = (int) s != s;    long ns = huge ? n : s * 1000000000L + n;    while (ns % 10 == 0)      {        ns = ns / 10;        scale--;      }    BigDecimal dec = new BigDecimal(BigInteger.valueOf(ns), scale);    if (huge)      dec = BigDecimal.valueOf(s).add(dec);    return dec;  }  public static Object secondsFromDuration (Object arg)  {    if (arg == null || arg == Values.empty) return arg;    Duration d = coerceToDuration("seconds-from-duration", arg);    int s = d.getSecondsOnly();    int n = d.getNanoSecondsOnly();    if (n == 0)      return asInteger(s);    else      return secondsBigDecimalFromDuration(s, n);  }  public static Duration getImplicitTimezone ()  {    return Duration.makeMinutes(TimeZone.getDefault().getRawOffset() / 60000);  }  public static Object adjustDateTimeToTimezone (Object time)  {    return adjustDateTimeToTimezone(time, getImplicitTimezone());  }  public static Object adjustDateTimeToTimezone (Object time, Object zone)  {    if (time == Values.empty || time == null)      return time;    DateTime dtime = coerceToDateTime("adjust-dateTime-to-timezone", time);    return adjustDateTimeToTimezoneRaw(dtime, zone);  }  public static Object adjustDateToTimezone (Object time)  {    return adjustDateToTimezone(time, getImplicitTimezone());  }  public static Object adjustDateToTimezone (Object time, Object zone)  {    if (time == Values.empty || time == null)      return time;    DateTime dtime = coerceToDate("adjust-date-to-timezone", time);    return adjustDateTimeToTimezoneRaw(dtime, zone);  }  public static Object adjustTimeToTimezone (Object time)  {    return adjustTimeToTimezone(time, getImplicitTimezone());  }  public static Object adjustTimeToTimezone (Object time, Object zone)  {    if (time == Values.empty || time == null)      return time;    DateTime dtime = coerceToTime("adjust-time-to-timezone", time);    return adjustDateTimeToTimezoneRaw(dtime, zone);  }  static Object adjustDateTimeToTimezoneRaw (DateTime dtime, Object zone)  {    if (zone == Values.empty || zone == null)      return dtime.withZoneUnspecified();    Duration d = (Duration) zone;    if (d.getNanoSecondsOnly() != 0 || d.getSecondsOnly() != 0)      throw new IllegalArgumentException("timezone offset with fractional minute");    int delta = (int) d.getTotalMinutes();    if (delta < -14 * 60 || delta > 14 * 60)      throw new IllegalArgumentException("timezone offset out of range");    return dtime.adjustTimezone(delta);  }  public static DateTime now ()  {    return gnu.kawa.xml.XTimeType.dateTimeType.now();  }  public static Object dateTime (Object arg1, Object arg2)  {    if (arg1 == null || arg1 == Values.empty) return arg1;    if (arg2 == null || arg2 == Values.empty) return arg2;    DateTime date = coerceToDate("dateTime", arg1);    DateTime time = coerceToTime("dateTime", arg2);    StringBuffer sbuf = new StringBuffer();    date.toStringDate(sbuf);    sbuf.append('T');    time.toStringTime(sbuf);    boolean hasZone1 = ! date.isZoneUnspecified();    boolean hasZone2 = ! time.isZoneUnspecified();    if (hasZone1 || hasZone2)      {        int zone1 = date.getZoneMinutes();        int zone2 = time.getZoneMinutes();        if (hasZone1 && hasZone2 && zone1 != zone2)          throw new Error("dateTime: incompatible timezone in arguments");        DateTime.toStringZone(hasZone1 ? zone1 : zone2, sbuf);      }    return (DateTime) XTimeType.dateTimeType.valueOf(sbuf.toString());  }  /* #ifdef JAVA2 */  /* #ifdef JAVA5 */  // static final ThreadLocal<DateTime> currentDateTimeLocal =  //   new ThreadLocal<DateTime>();  /* #else */  static final ThreadLocal currentDateTimeLocal = new ThreadLocal();  /* #endif */  /* #else */  // static DateTime currentDateTime;  /* #endif */  public static DateTime currentDateTime ()  {    /* #ifdef JAVA2 */    DateTime current = (DateTime) currentDateTimeLocal.get();    if (current == null)      {        current = now();        currentDateTimeLocal.set(current);      }    /* #else */    // DateTime current = currentDateTime;    // if (current == null)    //   {    //     current = now();    //     currentDateTime = current;    //   }    /* #endif */    return current;  }  public static DateTime currentDate ()  {    return currentDateTime().cast(DateTime.DATE_MASK);  }  public static DateTime currentTime ()  {    return currentDateTime().cast(DateTime.TIME_MASK);  }  public static Object implicitTimezone ()  {    return timeZoneFromXTime(currentDateTime());  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -