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, ")")); } }
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); }
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); }
public void InsertValueAt(int index, DateTime value, JSonDateTimeKind kind) { throw new InvalidOperationException(); }
/// <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 SetValue(DateTime value, JSonDateTimeKind kind) { SetValue(Data.Count, new JSonMutableDecimalInt64Object(value, kind)); }
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, ")")); } }
/// <summary> /// Gets the DateTime value for given JSON object. /// </summary> public DateTime ToDateTimeValue(JSonDateTimeKind kind) { throw new InvalidOperationException(); }
/// <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)); }
IJSonObject IJSonObject.this[string name, DateTime defaultValue, JSonDateTimeKind kind] { get { throw new InvalidOperationException(); } }
public void SetValue(DateTime value, JSonDateTimeKind kind) { throw new InvalidOperationException(); }
public void SetValue(DateTime value, JSonDateTimeKind kind) { Data = DateTimeHelper.ToNumber(value, kind); StringRepresentation = JSonWriter.ToString(value); }
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); }
/// <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); }