/// <summary>Creates an <code>XMPDateTime</code>-instance from a calendar.</summary> /// <param name="calendar">a <code>Calendar</code></param> public XMPDateTimeImpl(Sharpen.Calendar calendar) { // EMPTY // extract the date and timezone from the calendar provided DateTime date = calendar.GetTime(); TimeZoneInfo zone = calendar.GetTimeZone(); // put that date into a calendar the pretty much represents ISO8601 // I use US because it is close to the "locale" for the ISO8601 spec Sharpen.GregorianCalendar intCalendar = (Sharpen.GregorianCalendar)Sharpen.Calendar.GetInstance(CultureInfo.InvariantCulture); intCalendar.SetGregorianChange(Sharpen.Extensions.CreateDate(long.MinValue)); intCalendar.SetTimeZone(zone); intCalendar.SetTime(date); this.year = intCalendar.Get(Sharpen.CalendarEnum.Year); this.month = intCalendar.Get(Sharpen.CalendarEnum.Month) + 1; // cal is from 0..12 this.day = intCalendar.Get(Sharpen.CalendarEnum.DayOfMonth); this.hour = intCalendar.Get(Sharpen.CalendarEnum.HourOfDay); this.minute = intCalendar.Get(Sharpen.CalendarEnum.Minute); this.second = intCalendar.Get(Sharpen.CalendarEnum.Second); this.nanoSeconds = intCalendar.Get(Sharpen.CalendarEnum.Millisecond) * 1000000; this.timeZone = intCalendar.GetTimeZone(); // object contains all date components hasDate = hasTime = hasTimeZone = true; }
/// <summary>Make sure a time is UTC.</summary> /// <remarks> /// Make sure a time is UTC. If the time zone is not UTC, the time is /// adjusted and the time zone set to be UTC. /// </remarks> /// <param name="dateTime"> /// the <code>XMPDateTime</code> variable containing the time to /// be modified. /// </param> /// <returns>Returns an updated <code>XMPDateTime</code>-object.</returns> public static XMPDateTime ConvertToUTCTime(XMPDateTime dateTime) { long timeInMillis = dateTime.GetCalendar().GetTimeInMillis(); Sharpen.GregorianCalendar cal = new Sharpen.GregorianCalendar(Utc); cal.SetGregorianChange(Sharpen.Extensions.CreateDate(long.MinValue)); cal.SetTimeInMillis(timeInMillis); return new XMPDateTimeImpl(cal); }
/// <summary>Make sure a time is UTC.</summary> /// <remarks> /// Make sure a time is UTC. If the time zone is not UTC, the time is /// adjusted and the time zone set to be UTC. /// </remarks> /// <param name="dateTime"> /// the <code>XMPDateTime</code> variable containing the time to /// be modified. /// </param> /// <returns>Returns an updated <code>XMPDateTime</code>-object.</returns> public static XMPDateTime ConvertToUTCTime(XMPDateTime dateTime) { long timeInMillis = dateTime.GetCalendar().GetTimeInMillis(); Sharpen.GregorianCalendar cal = new Sharpen.GregorianCalendar(Utc); cal.SetGregorianChange(Sharpen.Extensions.CreateDate(long.MinValue)); cal.SetTimeInMillis(timeInMillis); return(new XMPDateTimeImpl(cal)); }
/// <seealso cref="Com.Adobe.Xmp.XMPDateTime.GetCalendar()"/> public virtual Sharpen.Calendar GetCalendar() { Sharpen.GregorianCalendar calendar = (Sharpen.GregorianCalendar)Sharpen.Calendar.GetInstance(CultureInfo.InvariantCulture); calendar.SetGregorianChange(Sharpen.Extensions.CreateDate(long.MinValue)); if (hasTimeZone) { calendar.SetTimeZone(timeZone); } calendar.Set(Sharpen.CalendarEnum.Year, year); calendar.Set(Sharpen.CalendarEnum.Month, month - 1); calendar.Set(Sharpen.CalendarEnum.DayOfMonth, day); calendar.Set(Sharpen.CalendarEnum.HourOfDay, hour); calendar.Set(Sharpen.CalendarEnum.Minute, minute); calendar.Set(Sharpen.CalendarEnum.Second, second); calendar.Set(Sharpen.CalendarEnum.Millisecond, nanoSeconds / 1000000); return(calendar); }
/// <summary>Make sure a time is UTC.</summary> /// <remarks> /// Make sure a time is UTC. If the time zone is not UTC, the time is /// adjusted and the time zone set to be UTC. /// </remarks> /// <param name="dateTime"> /// the <c>XMPDateTime</c> variable containing the time to /// be modified. /// </param> /// <returns>Returns an updated <c>XMPDateTime</c>-object.</returns> public static IXmpDateTime ConvertToUtcTime(IXmpDateTime dateTime) { var timeInMillis = dateTime.Calendar.GetTimeInMillis(); var cal = new GregorianCalendar(TimeZoneInfo.Utc); cal.SetGregorianChange(XmpDateTime.UnixTimeToDateTime(long.MinValue)); cal.SetTimeInMillis(timeInMillis); return new XmpDateTime(cal); }