home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 February / CHIP_2_98.iso / software / pelne / optionp / iis4_07.cab / JavaToVariant.java < prev    next >
Text File  |  1997-10-25  |  4KB  |  124 lines

  1. /*  ********************************************************************************
  2.     JavaToVariant.java *************************************************************
  3.     ********************************************************************************  */
  4.  
  5. package aspcomp;
  6.  
  7. import com.ms.com.*;
  8. import java.util.*;
  9.  
  10. /**
  11.  * Conversion routines.
  12.  */
  13.  
  14. public class JavaToVariant {
  15.  
  16. /*  ********************************************************************************
  17.     Internal (Private) Variables ***************************************************
  18.     ********************************************************************************  */
  19.  
  20.     private static int rgMonthDays[] =
  21.         {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
  22.  
  23.  
  24. /*  ********************************************************************************
  25.     External (Public) Methods ******************************************************
  26.     ********************************************************************************  */
  27.  
  28.     public static Variant fromBoolean(boolean b) 
  29.     {
  30.         return new Variant(b);
  31.     }
  32.  
  33.     public static Variant fromByte(byte b) 
  34.     {
  35.         return new Variant(Variant.VariantByte, b);
  36.     }
  37.  
  38.     public static Variant fromShort(short s) 
  39.     {
  40.         return new Variant(Variant.VariantShort, s);
  41.     }
  42.     
  43.     public static Variant fromInt(int i) 
  44.     {
  45.         return new Variant(i);
  46.     }
  47.  
  48.     public static Variant fromFloat(float f) 
  49.     {
  50.         return new Variant(Variant.VariantFloat, f);
  51.     }
  52.  
  53.     public static Variant fromDouble(double d) 
  54.     {
  55.         return new Variant(d);
  56.     }
  57.  
  58.     public static Variant fromString(String str) 
  59.     {
  60.         return new Variant(str);
  61.     }
  62.  
  63.     public static Variant fromObject(Object o) 
  64.     {
  65.         return new Variant(Variant.VariantObject, o);
  66.     }
  67.  
  68.     public static Variant fromDate(Date date) 
  69.     {
  70.         return new Variant(Variant.VariantDate, dateToDouble(date));
  71.     }
  72.  
  73.     public static double dateToDouble(Date date) 
  74.     {
  75.         String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
  76.         if (ids.length == 0) throw new AspComponentException(AspLocalizedStrings.ASP_E_INTERNAL_FAILURE);
  77.         SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
  78.         pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
  79.         pdt.setEndRule  (Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
  80.         GregorianCalendar calendar = new GregorianCalendar(pdt);
  81.         calendar.setTime(date);
  82.  
  83.         // source code copied from MFC 4.21 and modified.
  84.         int wYear   = calendar.get(Calendar.YEAR);
  85.         int wMonth  = calendar.get(Calendar.MONTH) + 1;
  86.         int wDay    = calendar.get(Calendar.DAY_OF_MONTH);
  87.         int wHour   = calendar.get(Calendar.HOUR_OF_DAY);
  88.         int wMinute = calendar.get(Calendar.MINUTE);
  89.         int wSecond = calendar.get(Calendar.SECOND);
  90.  
  91.         //  Check for leap year and set the number of days in the month
  92.         boolean bLeapYear = ((wYear & 3) == 0) &&
  93.                             ((wYear % 100) != 0 || (wYear % 400) == 0);
  94.  
  95.         int nDaysInMonth =
  96.                           rgMonthDays[wMonth] - rgMonthDays[wMonth-1] +
  97.                           ((bLeapYear && wDay == 29 && wMonth == 2) ? 1 : 0);
  98.  
  99.         // Cache the date in days and time in fractional days
  100.         long nDate;
  101.         double dblTime;
  102.  
  103.         //It is a valid date; make Jan 1, 1AD be 1
  104.         nDate = wYear*365L + wYear/4 - wYear/100 + wYear/400 +
  105.                 rgMonthDays[wMonth-1] + wDay;
  106.  
  107.         //  If leap year and it's before March, subtract 1:
  108.         if (wMonth <= 2 && bLeapYear)
  109.             --nDate;
  110.  
  111.         //  Offset so that 12/30/1899 is 0
  112.         nDate -= 693959L;
  113.  
  114.         dblTime = (((long)wHour * 3600L) +  // hrs in seconds
  115.                    ((long)wMinute * 60L) +  // mins in seconds
  116.                    ((long)wSecond)) / 86400.;
  117.  
  118.         double dtDest = (double) nDate + 
  119.                         ((nDate >= 0) ? dblTime : -dblTime);
  120.  
  121.         return dtDest;
  122.     }
  123. }
  124.