Contains helper for converting to and from the date formats
//http://facebooktoolkit.codeplex.com/ //http://facebooktoolkit.codeplex.com/license using System; namespace Facebook.Utility { ///<summary> /// Contains helper for converting to and from the date formats provided by facebook ///</summary> public static class DateHelper { ///<summary> /// Returns a datetime corresponding to 1/1/1970 ///</summary> public static DateTime BaseUTCDateTime { get { return new DateTime(1970, 1, 1, 0, 0, 0); } } ///<summary> /// Event dates are stored by assuming the time which the user input was in Pacific /// time (PST or PDT, depending on the date), converting that to UTC, and then /// converting that to Unix epoch time. This algorithm reverses that process. ///</summary> public static DateTime ConvertUnixTimeToDateTime(long secondsSinceEpoch) { DateTime utcDateTime = BaseUTCDateTime.AddSeconds(secondsSinceEpoch); int pacificZoneOffset = utcDateTime.IsDaylightSavingTime() ? -7 : -8; return utcDateTime.AddHours(pacificZoneOffset); } /// <summary> /// Convert datetime to UTC time, as understood by Facebook. /// </summary> /// <param name="dateToConvert">The date that we need to pass to the api.</param> /// <returns>The number of seconds since Jan 1, 1970.</returns> public static long ConvertDateToFacebookDate(DateTime dateToConvert) { return (long)((dateToConvert - BaseUTCDateTime).TotalSeconds); } /// <summary> /// Convert UTC time, as returned by Facebook, to localtime. /// </summary> /// <param name="secondsSinceEpoch">The number of seconds since Jan 1, 1970.</param> /// <returns>Local time.</returns> internal static DateTime ConvertDoubleToDate(double secondsSinceEpoch) { #if !SILVERLIGHT return TimeZone.CurrentTimeZone.ToLocalTime(BaseUTCDateTime.AddSeconds(secondsSinceEpoch)); #else return TimeZoneInfo.ConvertTime(BaseUTCDateTime.AddSeconds(secondsSinceEpoch), TimeZoneInfo.Local); #endif } //Event dates are stored by assuming the time which the user input was in Pacific // time (PST or PDT, depending on the date), converting that to UTC, and then // converting that to Unix epoch time. This algorithm reverses that process. internal static DateTime ConvertDoubleToEventDate(double secondsSinceEpoch) { DateTime utcDateTime = BaseUTCDateTime.AddSeconds(secondsSinceEpoch); int pacificZoneOffset = utcDateTime.IsDaylightSavingTime() ? -7 : -8; return utcDateTime.AddHours(pacificZoneOffset); } /// <summary> /// Convert datetime to UTC time, as understood by Facebook. /// </summary> /// <param name="dateToConvert">The date that we need to pass to the api.</param> /// <returns>The number of seconds since Jan 1, 1970.</returns> internal static double? ConvertDateToDouble(DateTime? dateToConvert) { return dateToConvert != null ? new double?((dateToConvert.Value - BaseUTCDateTime).TotalSeconds) : null; } } }