Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

CSHARP-645: Replace AsDateTime with ToLocalTime and ToUniversalTime i…

…n BsonValue (and related changes).
  • Loading branch information...
commit e13c7ba4e808918baaef60099fe674f6845111ce 1 parent 25f4bd7
rstam authored
35 MongoDB.Bson/ObjectModel/BsonDateTime.cs
View
@@ -55,7 +55,7 @@ public BsonDateTime(long millisecondsSinceEpoch)
/// <summary>
/// Gets whether this BsonDateTime is a valid .NET DateTime.
/// </summary>
- public bool IsValidDateTime
+ public override bool IsValidDateTime
{
get
{
@@ -236,20 +236,37 @@ public override int GetHashCode()
}
/// <summary>
- /// Converts the BsonDateTime value to a .NET DateTime value in the local timezone.
+ /// Converts this BsonValue to a DateTime in local time.
/// </summary>
- /// <returns>A DateTime in the local timezone.</returns>
- public DateTime ToLocalTime()
+ /// <returns>A DateTime.</returns>
+ public override DateTime ToLocalTime()
{
- var utcDateTime = BsonUtils.ToDateTimeFromMillisecondsSinceEpoch(_millisecondsSinceEpoch);
- return BsonUtils.ToLocalTime(utcDateTime);
+ return BsonUtils.ToLocalTime(ToUniversalTime());
}
/// <summary>
- /// Converts the BsonDateTime value to a .NET DateTime value in UTC.
+ /// Converts this BsonValue to a DateTime? in local time.
/// </summary>
- /// <returns>A DateTime in UTC.</returns>
- public DateTime ToUniversalTime()
+ /// <returns>A DateTime?.</returns>
+ public override DateTime? ToNullableLocalTime()
+ {
+ return ToLocalTime();
+ }
+
+ /// <summary>
+ /// Converts this BsonValue to a DateTime? in UTC.
+ /// </summary>
+ /// <returns>A DateTime?.</returns>
+ public override DateTime? ToNullableUniversalTime()
+ {
+ return ToUniversalTime();
+ }
+
+ /// <summary>
+ /// Converts this BsonValue to a DateTime in UTC.
+ /// </summary>
+ /// <returns>A DateTime.</returns>
+ public override DateTime ToUniversalTime()
{
return BsonUtils.ToDateTimeFromMillisecondsSinceEpoch(_millisecondsSinceEpoch);
}
18 MongoDB.Bson/ObjectModel/BsonNull.cs
View
@@ -132,6 +132,24 @@ public override bool ToBoolean()
}
/// <summary>
+ /// Converts this BsonValue to a DateTime? in local time.
+ /// </summary>
+ /// <returns>A DateTime?.</returns>
+ public override DateTime? ToNullableLocalTime()
+ {
+ return null;
+ }
+
+ /// <summary>
+ /// Converts this BsonValue to a DateTime? in UTC.
+ /// </summary>
+ /// <returns>A DateTime?.</returns>
+ public override DateTime? ToNullableUniversalTime()
+ {
+ return null;
+ }
+
+ /// <summary>
/// Returns a string representation of the value.
/// </summary>
/// <returns>A string representation of the value.</returns>
2  MongoDB.Bson/ObjectModel/BsonTypeMapper.cs
View
@@ -315,7 +315,7 @@ public static object MapToDotNetValue(BsonValue bsonValue, BsonTypeMapperOptions
case BsonType.Boolean:
return bsonValue.AsBoolean;
case BsonType.DateTime:
- return bsonValue.AsUniversalTime;
+ return bsonValue.ToUniversalTime();
case BsonType.Document:
var bsonDocument = (BsonDocument)bsonValue;
if (options.MapBsonDocumentTo == typeof(BsonDocument))
71 MongoDB.Bson/ObjectModel/BsonValue.cs
View
@@ -200,6 +200,7 @@ public byte[] AsByteArray
/// <summary>
/// Casts the BsonValue to a DateTime in UTC (throws an InvalidCastException if the cast is not valid).
/// </summary>
+ [Obsolete("Use ToUniversalTime instead.")]
public DateTime AsDateTime
{
get { return AsUniversalTime; }
@@ -232,6 +233,7 @@ public int AsInt32
/// <summary>
/// Casts the BsonValue to a DateTime in the local timezone (throws an InvalidCastException if the cast is not valid).
/// </summary>
+ [Obsolete("Use ToLocalTime instead.")]
public DateTime AsLocalTime
{
get { return ((BsonDateTime)this).ToLocalTime(); }
@@ -256,6 +258,7 @@ public long AsInt64
/// <summary>
/// Casts the BsonValue to a Nullable{DateTime} (throws an InvalidCastException if the cast is not valid).
/// </summary>
+ [Obsolete("Use ToNullableUniversalTime instead.")]
public DateTime? AsNullableDateTime
{
get { return (_bsonType == BsonType.Null) ? null : (DateTime?)AsDateTime; }
@@ -328,6 +331,7 @@ public string AsString
/// <summary>
/// Casts the BsonValue to a DateTime in UTC (throws an InvalidCastException if the cast is not valid).
/// </summary>
+ [Obsolete("Use ToUniversalTime instead.")]
public DateTime AsUniversalTime
{
get { return ((BsonDateTime)this).ToUniversalTime(); }
@@ -456,9 +460,10 @@ public bool IsBsonUndefined
/// <summary>
/// Tests whether this BsonValue is a DateTime.
/// </summary>
+ [Obsolete("Use IsValidDateTime instead.")]
public bool IsDateTime
{
- get { return _bsonType == BsonType.DateTime && ((BsonDateTime)this).IsValidDateTime; }
+ get { return IsValidDateTime; }
}
/// <summary>
@@ -535,6 +540,14 @@ public bool IsString
}
/// <summary>
+ /// Tests whether this BsonValue is a valid DateTime.
+ /// </summary>
+ public virtual bool IsValidDateTime
+ {
+ get { return false; }
+ }
+
+ /// <summary>
/// Gets the raw value of this BsonValue (or null if this BsonValue doesn't have a single scalar value).
/// </summary>
// note: don't change return value to "this" or lots of things will break
@@ -770,7 +783,11 @@ public virtual object RawValue
{
throw new ArgumentNullException("value");
}
- return value.AsDateTime;
+ if (!(value is BsonDateTime))
+ {
+ throw new InvalidCastException();
+ }
+ return value.ToUniversalTime();
}
/// <summary>
@@ -780,7 +797,11 @@ public virtual object RawValue
/// <returns>A DateTime?.</returns>
public static explicit operator DateTime?(BsonValue value)
{
- return (value == null) ? null : value.AsNullableDateTime;
+ if (value != null && !((value is BsonDateTime) || (value is BsonNull)))
+ {
+ throw new InvalidCastException();
+ }
+ return (value == null) ? null : value.ToNullableUniversalTime();
}
/// <summary>
@@ -1252,6 +1273,46 @@ public virtual long ToInt64()
}
/// <summary>
+ /// Converts this BsonValue to a DateTime in local time.
+ /// </summary>
+ /// <returns>A DateTime.</returns>
+ public virtual DateTime ToLocalTime()
+ {
+ var message = string.Format("{0} does not support ToLocalTime.", this.GetType().Name);
+ throw new NotSupportedException(message);
+ }
+
+ /// <summary>
+ /// Converts this BsonValue to a DateTime? in local time.
+ /// </summary>
+ /// <returns>A DateTime?.</returns>
+ public virtual DateTime? ToNullableLocalTime()
+ {
+ var message = string.Format("{0} does not support ToNullableLocalTime.", this.GetType().Name);
+ throw new NotSupportedException(message);
+ }
+
+ /// <summary>
+ /// Converts this BsonValue to a DateTime? in UTC.
+ /// </summary>
+ /// <returns>A DateTime?.</returns>
+ public virtual DateTime? ToNullableUniversalTime()
+ {
+ var message = string.Format("{0} does not support ToNullableUniversalTime.", this.GetType().Name);
+ throw new NotSupportedException(message);
+ }
+
+ /// <summary>
+ /// Converts this BsonValue to a DateTime in UTC.
+ /// </summary>
+ /// <returns>A DateTime.</returns>
+ public virtual DateTime ToUniversalTime()
+ {
+ var message = string.Format("{0} does not support ToUniversalTime.", this.GetType().Name);
+ throw new NotSupportedException(message);
+ }
+
+ /// <summary>
/// Writes the BsonValue to a BsonWriter.
/// </summary>
/// <param name="bsonWriter">The writer.</param>
@@ -1428,7 +1489,7 @@ DateTime IConvertible.ToDateTime(IFormatProvider provider)
{
switch (_bsonType)
{
- case BsonType.DateTime: return this.AsDateTime;
+ case BsonType.DateTime: return this.ToUniversalTime();
case BsonType.String: return Convert.ToDateTime(this.AsString, provider);
default: throw new InvalidCastException();
}
@@ -1544,7 +1605,7 @@ object IConvertible.ToType(Type conversionType, IFormatProvider provider)
switch (_bsonType)
{
case BsonType.Boolean: return Convert.ChangeType(this.AsBoolean, conversionType, provider);
- case BsonType.DateTime: return Convert.ChangeType(this.AsDateTime, conversionType, provider);
+ case BsonType.DateTime: return Convert.ChangeType(this.ToUniversalTime(), conversionType, provider);
case BsonType.Double: return Convert.ChangeType(this.AsDouble, conversionType, provider);
case BsonType.Int32: return Convert.ChangeType(this.AsInt32, conversionType, provider);
case BsonType.Int64: return Convert.ChangeType(this.AsInt64, conversionType, provider);
16 MongoDB.BsonUnitTests/Jira/CSharp261Tests.cs
View
@@ -49,7 +49,7 @@ public void TestNewDateZero()
var json = "{ date : new Date(0) }";
var document = BsonDocument.Parse(json);
Assert.AreEqual(BsonType.DateTime, document["date"].BsonType);
- Assert.AreEqual(BsonConstants.UnixEpoch, document["date"].AsDateTime);
+ Assert.AreEqual(BsonConstants.UnixEpoch, document["date"].ToUniversalTime());
}
[Test]
@@ -60,7 +60,7 @@ public void TestNewDateMillisecondsSinceEpoch()
var json = string.Format("{{ date : new Date({0}) }}", millisecondsSinceEpoch);
var document = BsonDocument.Parse(json);
Assert.AreEqual(BsonType.DateTime, document["date"].BsonType);
- Assert.AreEqual(BsonUtils.ToDateTimeFromMillisecondsSinceEpoch(millisecondsSinceEpoch), document["date"].AsDateTime);
+ Assert.AreEqual(BsonUtils.ToDateTimeFromMillisecondsSinceEpoch(millisecondsSinceEpoch), document["date"].ToUniversalTime());
}
[Test]
@@ -70,7 +70,7 @@ public void TestNewDateString()
var json = string.Format("{{ date : new Date('{0}') }}", dateTimeString);
var document = BsonDocument.Parse(json);
Assert.AreEqual(BsonType.DateTime, document["date"].BsonType);
- Assert.AreEqual(new DateTime(2011, 7, 7, 18, 58, 59), document["date"].AsDateTime); // note date is now in UTC
+ Assert.AreEqual(new DateTime(2011, 7, 7, 18, 58, 59), document["date"].ToUniversalTime()); // note date is now in UTC
}
[Test]
@@ -79,7 +79,7 @@ public void TestNewDateYMD()
var json = "{ date : new Date(2011, 6, 7) }"; // July = 6 in JavaScript
var document = BsonDocument.Parse(json);
Assert.AreEqual(BsonType.DateTime, document["date"].BsonType);
- Assert.AreEqual(new DateTime(2011, 7, 7), document["date"].AsDateTime);
+ Assert.AreEqual(new DateTime(2011, 7, 7), document["date"].ToUniversalTime());
}
[Test]
@@ -88,7 +88,7 @@ public void TestNewDateYMDH()
var json = "{ date : new Date(2011, 6, 7, 1) }"; // July = 6 in JavaScript
var document = BsonDocument.Parse(json);
Assert.AreEqual(BsonType.DateTime, document["date"].BsonType);
- Assert.AreEqual(new DateTime(2011, 7, 7, 1, 0, 0), document["date"].AsDateTime);
+ Assert.AreEqual(new DateTime(2011, 7, 7, 1, 0, 0), document["date"].ToUniversalTime());
}
[Test]
@@ -97,7 +97,7 @@ public void TestNewDateYMDHM()
var json = "{ date : new Date(2011, 6, 7, 1, 2) }"; // July = 6 in JavaScript
var document = BsonDocument.Parse(json);
Assert.AreEqual(BsonType.DateTime, document["date"].BsonType);
- Assert.AreEqual(new DateTime(2011, 7, 7, 1, 2, 0), document["date"].AsDateTime);
+ Assert.AreEqual(new DateTime(2011, 7, 7, 1, 2, 0), document["date"].ToUniversalTime());
}
[Test]
@@ -106,7 +106,7 @@ public void TestNewDateYMDHMS()
var json = "{ date : new Date(2011, 6, 7, 1, 2, 33) }"; // July = 6 in JavaScript
var document = BsonDocument.Parse(json);
Assert.AreEqual(BsonType.DateTime, document["date"].BsonType);
- Assert.AreEqual(new DateTime(2011, 7, 7, 1, 2, 33), document["date"].AsDateTime);
+ Assert.AreEqual(new DateTime(2011, 7, 7, 1, 2, 33), document["date"].ToUniversalTime());
}
[Test]
@@ -115,7 +115,7 @@ public void TestNewDateYMDHMSms()
var json = "{ date : new Date(2011, 6, 7, 1, 2, 33, 456) }"; // July = 6 in JavaScript
var document = BsonDocument.Parse(json);
Assert.AreEqual(BsonType.DateTime, document["date"].BsonType);
- Assert.AreEqual(new DateTime(2011, 7, 7, 1, 2, 33, 456), document["date"].AsDateTime);
+ Assert.AreEqual(new DateTime(2011, 7, 7, 1, 2, 33, 456), document["date"].ToUniversalTime());
}
}
}
2  MongoDB.BsonUnitTests/Jira/CSharp275Tests.cs
View
@@ -138,7 +138,7 @@ public void TestParseDates()
var message = string.Format("Error parsing: new Date(\"{0}\"). Message: {1}.", test.Json, ex.Message);
Assert.Fail(message); // note: the test data for 2-digit years needs to be adjusted at the beginning of each year
}
- var dateTime = document["date"].AsDateTime;
+ var dateTime = document["date"].ToUniversalTime();
var expected = DateTime.Parse(test.Iso).ToUniversalTime();
Assert.AreEqual(DateTimeKind.Utc, dateTime.Kind);
Assert.AreEqual(DateTimeKind.Utc, expected.Kind);
6 MongoDB.BsonUnitTests/Jira/CSharp357Tests.cs
View
@@ -35,7 +35,7 @@ public void TestAsLocalTime()
var now = DateTime.Now;
var nowTruncated = now.AddTicks(-(now.Ticks % 10000));
var bsonDateTime = new BsonDateTime(now);
- var localDateTime = bsonDateTime.AsLocalTime;
+ var localDateTime = bsonDateTime.ToLocalTime();
Assert.AreEqual(DateTimeKind.Local, localDateTime.Kind);
Assert.AreEqual(nowTruncated, localDateTime);
}
@@ -63,7 +63,7 @@ public void TestDateTimeMaxValue()
Assert.AreEqual(DateTimeKind.Utc, utcDateTime.Kind);
Assert.AreEqual(DateTime.MaxValue, utcDateTime);
- var localDateTime = bsonDateTime.AsLocalTime;
+ var localDateTime = bsonDateTime.ToLocalTime();
Assert.AreEqual(DateTimeKind.Local, localDateTime.Kind);
Assert.AreEqual(DateTime.MaxValue, localDateTime);
}
@@ -81,7 +81,7 @@ public void TestDateTimeMinValue()
Assert.AreEqual(DateTimeKind.Utc, utcDateTime.Kind);
Assert.AreEqual(DateTime.MinValue, utcDateTime);
- var localDateTime = bsonDateTime.AsLocalTime;
+ var localDateTime = bsonDateTime.ToLocalTime();
Assert.AreEqual(DateTimeKind.Local, localDateTime.Kind);
Assert.AreEqual(DateTime.MinValue, localDateTime);
}
4 MongoDB.BsonUnitTests/ObjectModel/BsonArrayTests.cs
View
@@ -290,8 +290,8 @@ public void TestCreateDateTimeArray()
Assert.AreEqual(2, array.Count);
Assert.IsInstanceOf<BsonDateTime>(array[0]);
Assert.IsInstanceOf<BsonDateTime>(array[1]);
- Assert.AreEqual(value1, array[0].AsDateTime);
- Assert.AreEqual(value2, array[1].AsDateTime);
+ Assert.AreEqual(value1, array[0].ToUniversalTime());
+ Assert.AreEqual(value2, array[1].ToUniversalTime());
}
[Test]
11 MongoDB.BsonUnitTests/ObjectModel/BsonDocumentTests.cs
View
@@ -572,14 +572,17 @@ public void TestNullableDateTime()
Assert.AreEqual(null, (DateTime?)document["x", (DateTime?)null]);
Assert.AreEqual(null, (DateTime?)document["x", BsonNull.Value]);
#pragma warning restore
- Assert.AreEqual(utcNowTruncated, document["v"].AsNullableDateTime);
- Assert.AreEqual(null, document["n"].AsNullableDateTime);
+ Assert.AreEqual(utcNowTruncated, document["v"].ToNullableUniversalTime());
+ Assert.AreEqual(null, document["n"].ToNullableUniversalTime());
#pragma warning disable 618
- Assert.AreEqual(null, document["x", (DateTime?)null].AsNullableDateTime);
- Assert.AreEqual(null, document["x", BsonNull.Value].AsNullableDateTime);
+ Assert.AreEqual(null, document["x", (DateTime?)null].ToNullableUniversalTime());
+ Assert.AreEqual(null, document["x", BsonNull.Value].ToNullableUniversalTime());
#pragma warning restore
Assert.Throws<InvalidCastException>(() => { var v = (DateTime?)document["s"]; });
+#pragma warning disable 618
Assert.Throws<InvalidCastException>(() => { var v = document["s"].AsNullableDateTime; });
+#pragma warning restore
+ Assert.Throws<NotSupportedException>(() => { var v = document["s"].ToNullableUniversalTime(); });
}
[Test]
2  MongoDB.BsonUnitTests/ObjectModel/BsonTypeMapperTests.cs
View
@@ -638,7 +638,7 @@ public void TestCustomTypeMapper()
var customDateTime = new CustomDateTime { DateTime = utcNow };
BsonValue bsonValue;
Assert.AreEqual(true, BsonTypeMapper.TryMapToBsonValue(customDateTime, out bsonValue));
- Assert.AreEqual(utcNowTruncated, bsonValue.AsDateTime);
+ Assert.AreEqual(utcNowTruncated, bsonValue.ToUniversalTime());
}
}
}
12 MongoDB.BsonUnitTests/ObjectModel/BsonValueTests.cs
View
@@ -179,9 +179,12 @@ public void TestAsDateTime()
var utcNowTruncated = utcNow.AddTicks(-(utcNow.Ticks % 10000));
BsonValue v = utcNow;
BsonValue s = "";
- var dt = v.AsDateTime;
+ var dt = v.ToUniversalTime();
Assert.AreEqual(utcNowTruncated, dt);
+#pragma warning disable 618
Assert.Throws<InvalidCastException>(() => { var x = s.AsDateTime; });
+#pragma warning restore
+ Assert.Throws<NotSupportedException>(() => { var x = s.ToUniversalTime(); });
}
[Test]
@@ -244,9 +247,12 @@ public void TestAsNullableDateTime()
BsonValue v = utcNow;
BsonValue n = BsonNull.Value;
BsonValue s = "";
- Assert.AreEqual(utcNowTruncated, v.AsNullableDateTime);
- Assert.AreEqual(null, n.AsNullableDateTime);
+ Assert.AreEqual(utcNowTruncated, v.ToNullableUniversalTime());
+ Assert.AreEqual(null, n.ToNullableUniversalTime());
+#pragma warning disable 618
Assert.Throws<InvalidCastException>(() => { var x = s.AsNullableDateTime; });
+#pragma warning restore
+ Assert.Throws<NotSupportedException>(() => { var x = s.ToNullableUniversalTime(); });
}
[Test]
6 MongoDB.BsonUnitTests/Serialization/Serializers/BsonValueSerializerTests.cs
View
@@ -339,7 +339,7 @@ public void TestMaxUtc()
public void TestLocal()
{
var obj = new TestClass(new DateTime(2010, 10, 08, 13, 30, 0, DateTimeKind.Local));
- var isoDate = string.Format("ISODate(\"{0}\")", obj.V.AsDateTime.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.FFFZ"));
+ var isoDate = string.Format("ISODate(\"{0}\")", obj.V.ToUniversalTime().ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.FFFZ"));
long milliseconds = (long)(obj.V.ToUniversalTime() - BsonConstants.UnixEpoch).TotalMilliseconds;
var json = obj.ToJson();
var expected = "{ 'B' : #, 'V' : # }".Replace("#", isoDate).Replace("'", "\"");
@@ -354,7 +354,7 @@ public void TestLocal()
public void TestUnspecified()
{
var obj = new TestClass(new DateTime(2010, 10, 08, 13, 30, 0, DateTimeKind.Unspecified));
- var isoDate = string.Format("ISODate(\"{0}\")", obj.V.AsDateTime.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.FFFZ"));
+ var isoDate = string.Format("ISODate(\"{0}\")", obj.V.ToUniversalTime().ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.FFFZ"));
var json = obj.ToJson();
var expected = "{ 'B' : #, 'V' : # }".Replace("#", isoDate).Replace("'", "\"");
Assert.AreEqual(expected, json);
@@ -368,7 +368,7 @@ public void TestUnspecified()
public void TestUtc()
{
var obj = new TestClass(new DateTime(2010, 10, 08, 13, 30, 0, DateTimeKind.Utc));
- var isoDate = string.Format("ISODate(\"{0}\")", obj.V.AsDateTime.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.FFFZ"));
+ var isoDate = string.Format("ISODate(\"{0}\")", obj.V.ToUniversalTime().ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.FFFZ"));
var json = obj.ToJson();
var expected = "{ 'B' : #, 'V' : # }".Replace("#", isoDate).Replace("'", "\"");
Assert.AreEqual(expected, json);
2  MongoDB.Driver/GridFS/MongoGridFSFileInfo.cs
View
@@ -560,7 +560,7 @@ private void CacheFileInfo(BsonDocument fileInfo)
{
_name = null;
}
- _uploadDate = fileInfo["uploadDate"].AsDateTime;
+ _uploadDate = fileInfo["uploadDate"].ToUniversalTime();
}
_cached = true;
}
4 MongoDB.DriverUnitTests/Jira/CSharp258Tests.cs
View
@@ -91,7 +91,7 @@ public void TestDocumentWithNewMaxDateTimeRepresentation()
});
var document = _collection.FindOneAs<BsonDocument>();
- Assert.AreEqual(DateTime.MaxValue, document["DateTime"].AsDateTime);
+ Assert.AreEqual(DateTime.MaxValue, document["DateTime"].ToUniversalTime());
Assert.AreEqual(253402300799999, document["DateTime"].AsBsonDateTime.MillisecondsSinceEpoch);
}
@@ -107,7 +107,7 @@ public void TestDocumentWithOldMaxDateTimeRepresentation()
});
var document = _collection.FindOneAs<BsonDocument>();
- Assert.AreEqual(DateTime.MaxValue, document["DateTime"].AsDateTime);
+ Assert.AreEqual(DateTime.MaxValue, document["DateTime"].ToUniversalTime());
Assert.AreEqual(253402300799999, document["DateTime"].AsBsonDateTime.MillisecondsSinceEpoch);
}
}
2  MongoDB.DriverUnitTests/MongoCollectionTests.cs
View
@@ -349,7 +349,7 @@ public void TestFindAndModify()
Assert.AreEqual(1, result.ModifiedDocument["priority"].AsInt32);
Assert.AreEqual(true, result.ModifiedDocument["inprogress"].AsBoolean);
Assert.AreEqual("abc", result.ModifiedDocument["name"].AsString);
- Assert.AreEqual(started, result.ModifiedDocument["started"].AsDateTime);
+ Assert.AreEqual(started, result.ModifiedDocument["started"].ToUniversalTime());
}
[Test]
Please sign in to comment.
Something went wrong with that request. Please try again.