Skip to content

Commit 5f88660

Browse files
committed
Datetime handling - updated default for DynamoDB data model to return UTC by default.
1 parent 9611cba commit 5f88660

File tree

4 files changed

+9
-9
lines changed

4 files changed

+9
-9
lines changed

sdk/src/Services/DynamoDBv2/Custom/AWSConfigs.DynamoDB.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,9 @@ public partial class DynamoDBContextConfig
170170
/// <summary>
171171
/// If true, all <see cref="DateTime"/> properties are retrieved in UTC timezone while reading data from DynamoDB. Else, the local timezone is used.
172172
/// </summary>
173-
/// <remarks>This setting is only applicable to the high-level library. Service calls made via <see cref="AmazonDynamoDBClient"/> will always return <see cref="DateTime"/> attributes in UTC.</remarks>
174-
public bool? RetrieveDateTimeInUtc { get; set; }
173+
/// <remarks>This setting is only applicable to the high-level library. Service calls made via <see cref="AmazonDynamoDBClient"/> will always
174+
/// return <see cref="DateTime"/> attributes in UTC. The default is true to return datetimes in UTC format.</remarks>
175+
public bool? RetrieveDateTimeInUtc { get; set; } = true;
175176

176177
/// <summary>
177178
/// Adds a TableAlias to the TableAliases property.

sdk/src/Services/DynamoDBv2/Custom/Conversion/SchemaV1.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,11 +252,11 @@ protected override bool TryTo(DateTime value, out Primitive p)
252252
}
253253
protected override bool TryFrom(Primitive p, Type targetType, out DateTime result)
254254
{
255-
if (DateTime.TryParseExact(p.StringValue, AWSSDKUtils.ISO8601DateFormat, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out result))
255+
if (DateTime.TryParseExact(p.StringValue, AWSSDKUtils.ISO8601DateFormat, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out result))
256256
{
257257
return true;
258258
}
259-
return DateTime.TryParse(p.StringValue, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out result);
259+
return DateTime.TryParse(p.StringValue, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out result);
260260
}
261261
}
262262

sdk/src/Services/DynamoDBv2/Custom/DataModel/ContextInternal.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -475,15 +475,15 @@ private object FromDynamoDBEntry(SimplePropertyStorage propertyStorage, DynamoDB
475475
if (conversion.HasConverter(targetType))
476476
{
477477
var output = conversion.ConvertFromEntry(targetType, entry);
478-
if (flatConfig.RetrieveDateTimeInUtc)
478+
if (!flatConfig.RetrieveDateTimeInUtc)
479479
{
480480
if (targetType == typeof(DateTime))
481481
{
482-
return ((DateTime)output).ToUniversalTime();
482+
return ((DateTime)output).ToLocalTime();
483483
}
484484
else if (targetType == typeof(DateTime?))
485485
{
486-
return ((DateTime?)output)?.ToUniversalTime();
486+
return ((DateTime?)output)?.ToLocalTime();
487487
}
488488
}
489489
return output;

sdk/test/NetStandard/IntegrationTests/IntegrationTests/DynamoDB/DataModelTests.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,8 +383,7 @@ private async Task TestHashObjects()
383383
Assert.Equal(product.KeySizes.Count, retrieved.KeySizes.Count);
384384
Assert.NotNull(retrieved.CompanyInfo);
385385
Assert.Equal(product.CompanyInfo.Name, retrieved.CompanyInfo.Name);
386-
//TODO: this is coming back in UTC but the original is DateTimeKind.Unspecified
387-
Assert.Equal(product.CompanyInfo.Founded, retrieved.CompanyInfo.Founded);
386+
Assert.Equal(product.CompanyInfo.Founded.ToUniversalTime(), retrieved.CompanyInfo.Founded);
388387
Assert.NotEqual(product.CompanyInfo.Revenue, retrieved.CompanyInfo.Revenue);
389388
Assert.Equal(product.CompanyInfo.AllProducts.Count, retrieved.CompanyInfo.AllProducts.Count);
390389
Assert.Equal(product.CompanyInfo.AllProducts[0].Id, retrieved.CompanyInfo.AllProducts[0].Id);

0 commit comments

Comments
 (0)