internal static readonly long TicksAt1970 = 621355968000000000L; //new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;

        /// <summary>
        /// Parses string in following formats to DateTime representation:
        ///  - @decimal@ - 1970-01-01 + decimal (millisec) - UTC!
        ///  - \/Date(decimal)\/ - 1970-01-01 + decimal (millisec) - UTC!
        ///  - \/Date(yyyy,MM,dd[,hh,mm,ss,mmm])\/ - direct params - UTC!
        ///  - decimal - 1970-01-01 + decimal (millisec/sec) - UTC!
        ///  - ISO format - with time zones support
        /// </summary>
        public static DateTime ParseDateTime(string text, IFormatProvider provider, DateTimeStyles styles, JSonDateTimeKind kind)
        {
            if (!String.IsNullOrEmpty(text))
            {
                var date = text.Replace(" ", String.Empty).Replace("\t", String.Empty);

                if (date.Length > 2)
                {
                    if (date[0] == '@' && date[date.Length - 1] == '@')
                        return ParseDateTimeAsDecimal(date.Substring(1, date.Length - 2));

                    if (date.StartsWith("\\/Date(", StringComparison.OrdinalIgnoreCase) && date.EndsWith(")\\/"))
                        return ParseDateTimeAsArrayOfDecimals(date.Substring(7, date.Length - 10));

                    if (date.StartsWith("/Date(", StringComparison.OrdinalIgnoreCase) && date.EndsWith(")/"))
                        return ParseDateTimeAsArrayOfDecimals(date.Substring(6, date.Length - 8));
                }
            }

            // try to parse date as a pure number:
            long dateValue;
            if (NumericHelper.TryParseInt64(text, out dateValue))
                return ToDateTime(dateValue, kind);

            // always try to parse as ISO format, to get the result or throw a standard exception, when non-matching format given:
            return DateTime.Parse(text, provider, styles);
        }
        public static Int64 ToNumber(DateTime date, JSonDateTimeKind kind)
        {
            var  dateAsUniversal = date.ToUniversalTime();
            long ticks           = dateAsUniversal.Ticks;

            switch (kind)
            {
            case JSonDateTimeKind.Default:
            case JSonDateTimeKind.UnixEpochMilliseconds:
                if (ticks < TicksAt1970)
                {
                    throw new ArgumentOutOfRangeException("date");
                }
                return((ticks - TicksAt1970) / TimeSpan.TicksPerMillisecond);

            case JSonDateTimeKind.UnixEpochSeconds:
                if (ticks < TicksAt1970)
                {
                    throw new ArgumentOutOfRangeException("date");
                }
                return((ticks - TicksAt1970) / TimeSpan.TicksPerSecond);

            case JSonDateTimeKind.Ticks:
                return(ticks);

            default:
                throw new FormatException(string.Concat("Invalid date conversion kind (", kind, ")"));
            }
        }
Example #3
0
        IJSonObject IJSonObject.this[String name, DateTime defaultValue, JSonDateTimeKind kind]
        {
            get
            {
                IJSonObject result;

                if (_data.TryGetValue(name, out result))
                {
                    return(result);
                }

                return(new JSonDecimalInt64Object(defaultValue, kind));
            }
        }
        /// <summary>
        /// Converts given decimal value into a DateTime object.
        /// </summary>
        public static DateTime ToDateTime(Int64 value, JSonDateTimeKind kind)
        {
            switch (kind)
            {
            case JSonDateTimeKind.Default:
            case JSonDateTimeKind.UnixEpochMilliseconds:
                return(new DateTime(TicksAt1970 + (value * TimeSpan.TicksPerMillisecond), DateTimeKind.Utc).ToLocalTime());

            case JSonDateTimeKind.UnixEpochSeconds:
                return(new DateTime(TicksAt1970 + (value * TimeSpan.TicksPerSecond), DateTimeKind.Utc).ToLocalTime());

            case JSonDateTimeKind.Ticks:
                return(new DateTime(value, DateTimeKind.Utc).ToLocalTime());

            default:
                throw new FormatException(string.Concat("Invalid date conversion kind (", kind, ")"));
            }
        }
 public void InsertValueAt(int index, DateTime value, JSonDateTimeKind kind)
 {
     InsertValue(index, new JSonMutableDecimalInt64Object(value, kind));
 }
 public void SetValue(DateTime value, JSonDateTimeKind kind)
 {
     Data = (UInt32)DateTimeHelper.ToNumber(value, kind);
 }
Example #7
0
 public JSonMutableDecimalInt64Object(DateTime date, JSonDateTimeKind kind)
     : base(date, kind)
 {
 }
        /// <summary>
        /// Converts given decimal value into a DateTime object.
        /// </summary>
        public static DateTime ToDateTime(Int64 value, JSonDateTimeKind kind)
        {
            switch(kind)
            {
                case JSonDateTimeKind.Default:
                case JSonDateTimeKind.UnixEpochMilliseconds:
                    return new DateTime(TicksAt1970 + (value * TimeSpan.TicksPerMillisecond), DateTimeKind.Utc).ToLocalTime();
                case JSonDateTimeKind.UnixEpochSeconds:
                    return new DateTime(TicksAt1970 + (value * TimeSpan.TicksPerSecond), DateTimeKind.Utc).ToLocalTime();
                case JSonDateTimeKind.Ticks:
                    return new DateTime(value, DateTimeKind.Utc).ToLocalTime();

                default:
                    throw new FormatException(string.Concat("Invalid date conversion kind (", kind, ")"));
            }
        }
 /// <summary>
 /// Init constructor.
 /// </summary>
 public JSonDecimalInt64Object(DateTime date, JSonDateTimeKind kind)
 {
     _data = DateTimeHelper.ToNumber(date, kind);
     _stringRepresentation = JSonWriter.ToString(date);
 }
Example #10
0
 public void InsertValueAt(int index, DateTime value, JSonDateTimeKind kind)
 {
     throw new InvalidOperationException();
 }
Example #11
0
 /// <summary>
 /// Gets the DateTime value for given JSON object.
 /// </summary>
 public DateTime ToDateTimeValue(JSonDateTimeKind kind)
 {
     return(DateTimeHelper.ParseDateTime(_data, kind));
 }
 public void SetValue(string name, DateTime value, JSonDateTimeKind kind)
 {
     SetValue(name, new JSonMutableDecimalInt64Object(value, kind));
 }
 public void SetValue(DateTime value, JSonDateTimeKind kind)
 {
     Data = JSonWriter.ToString(value);
 }
 /// <summary>
 /// Gets the DateTime value for given JSON object.
 /// </summary>
 public DateTime ToDateTimeValue(JSonDateTimeKind kind)
 {
     return(DateTimeHelper.ToDateTime(GetInt64Value(), kind));
 }
 public void InsertValueAt(int index, DateTime value, JSonDateTimeKind kind)
 {
     InsertValue(index, new JSonMutableDecimalInt64Object(value, kind));
 }
 public void SetValue(DateTime value, JSonDateTimeKind kind)
 {
     SetValue(Data.Count, new JSonMutableDecimalInt64Object(value, kind));
 }
Example #17
0
        public static Int64 ToNumber(DateTime date, JSonDateTimeKind kind)
        {
            var dateAsUniversal = date.ToUniversalTime();
            long ticks = dateAsUniversal.Ticks;

            switch(kind)
            {
                case JSonDateTimeKind.Default:
                case JSonDateTimeKind.UnixEpochMilliseconds:
                    if (ticks < TicksAt1970)
                        throw new ArgumentOutOfRangeException("date");
                    return (ticks - TicksAt1970) / TimeSpan.TicksPerMillisecond;
                case JSonDateTimeKind.UnixEpochSeconds:
                    if (ticks < TicksAt1970)
                        throw new ArgumentOutOfRangeException("date");
                    return (ticks - TicksAt1970) / TimeSpan.TicksPerSecond;
                case JSonDateTimeKind.Ticks:
                    return ticks;

                default:
                    throw new FormatException(string.Concat("Invalid date conversion kind (", kind, ")"));
            }
        }
Example #18
0
 /// <summary>
 /// Gets the DateTime value for given JSON object.
 /// </summary>
 public DateTime ToDateTimeValue(JSonDateTimeKind kind)
 {
     throw new InvalidOperationException();
 }
Example #19
0
 /// <summary>
 /// Parses several string formats into a DateTime object.
 /// Check other overloaded methods for more detailed description.
 /// </summary>
 public static DateTime ParseDateTime(string text, JSonDateTimeKind kind)
 {
     return(ParseDateTime(text, CultureInfo.InvariantCulture, DateTimeStyles.None, kind));
 }
Example #20
0
 IJSonObject IJSonObject.this[string name, DateTime defaultValue, JSonDateTimeKind kind]
 {
     get { throw new InvalidOperationException(); }
 }
 /// <summary>
 /// Init constructor.
 /// </summary>
 public JSonDecimalInt64Object(DateTime date, JSonDateTimeKind kind)
 {
     _data = DateTimeHelper.ToNumber(date, kind);
     _stringRepresentation = JSonWriter.ToString(date);
 }
Example #22
0
 public void SetValue(DateTime value, JSonDateTimeKind kind)
 {
     Data = JSonWriter.ToString(value);
 }
 public JSonMutableDecimalInt64Object(DateTime date, JSonDateTimeKind kind)
     : base(date, kind)
 {
 }
Example #24
0
 public void SetValue(DateTime value, JSonDateTimeKind kind)
 {
     throw new InvalidOperationException();
 }
 public void InsertValueAt(int index, DateTime value, JSonDateTimeKind kind)
 {
     throw new InvalidOperationException();
 }
Example #26
0
 public void SetValue(string name, DateTime value, JSonDateTimeKind kind)
 {
     SetValue(name, new JSonMutableDecimalInt64Object(value, kind));
 }
Example #27
0
 public void SetValue(DateTime value, JSonDateTimeKind kind)
 {
     Data = DateTimeHelper.ToNumber(value, kind);
     StringRepresentation = JSonWriter.ToString(value);
 }
 public void SetValue(DateTime value, JSonDateTimeKind kind)
 {
     Data = DateTimeHelper.ToNumber(value, kind);
     StringRepresentation = JSonWriter.ToString(value);
 }
Example #29
0
        internal static readonly long TicksAt1970 = 621355968000000000L; //new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;

        /// <summary>
        /// Parses string in following formats to DateTime representation:
        ///  - @decimal@ - 1970-01-01 + decimal (millisec) - UTC!
        ///  - \/Date(decimal)\/ - 1970-01-01 + decimal (millisec) - UTC!
        ///  - \/Date(yyyy,MM,dd[,hh,mm,ss,mmm])\/ - direct params - UTC!
        ///  - decimal - 1970-01-01 + decimal (millisec/sec) - UTC!
        ///  - ISO format - with time zones support
        /// </summary>
        public static DateTime ParseDateTime(string text, IFormatProvider provider, DateTimeStyles styles, JSonDateTimeKind kind)
        {
            if (!String.IsNullOrEmpty(text))
            {
                var date = text.Replace(" ", String.Empty).Replace("\t", String.Empty);

                if (date.Length > 2)
                {
                    if (date[0] == '@' && date[date.Length - 1] == '@')
                    {
                        return(ParseDateTimeAsDecimal(date.Substring(1, date.Length - 2)));
                    }

                    if (date.StartsWith("\\/Date(", StringComparison.OrdinalIgnoreCase) && date.EndsWith(")\\/"))
                    {
                        return(ParseDateTimeAsArrayOfDecimals(date.Substring(7, date.Length - 10)));
                    }

                    if (date.StartsWith("/Date(", StringComparison.OrdinalIgnoreCase) && date.EndsWith(")/"))
                    {
                        return(ParseDateTimeAsArrayOfDecimals(date.Substring(6, date.Length - 8)));
                    }
                }
            }

            // try to parse date as a pure number:
            long dateValue;

            if (NumericHelper.TryParseInt64(text, out dateValue))
            {
                return(ToDateTime(dateValue, kind));
            }

            // always try to parse as ISO format, to get the result or throw a standard exception, when non-matching format given:
            return(DateTime.Parse(text, provider, styles));
        }
 public void SetValue(DateTime value, JSonDateTimeKind kind)
 {
     Data = (Int32)DateTimeHelper.ToNumber(value, kind);
 }
 public void SetValue(DateTime value, JSonDateTimeKind kind)
 {
     SetValue(Data.Count, new JSonMutableDecimalInt64Object(value, kind));
 }
 public void SetValue(DateTime value, JSonDateTimeKind kind)
 {
     throw new InvalidOperationException();
 }
Example #33
0
 /// <summary>
 /// Parses several string formats into a DateTime object.
 /// Check other overloaded methods for more detailed description.
 /// </summary>
 public static DateTime ParseDateTime(string text, JSonDateTimeKind kind)
 {
     return ParseDateTime(text, CultureInfo.InvariantCulture, DateTimeStyles.None, kind);
 }