Pour notre cas, il était peu pratique de toujours spécifier DateTimeKind comme indiqué précédemment :
DateTime utcDateTime = DateTime.SpecifyKind(databaseDateTime, DateTimeKind.Utc);
Nous utilisons Entity Framework, mais cela devrait être similaire à Linq-to-SQL
Si vous souhaitez forcer tous les objets DateTime sortant de la base de données à être spécifiés en tant qu'UTC, vous devrez ajouter un fichier de transformation T4 et ajouter une logique supplémentaire pour tous les objets DateTime et les objets DateTime nuls de telle sorte qu'ils soient initialisés en DateTimeKind.Utc
J'ai un article de blog qui explique cela étape par étape: http://www.aaroncoleman.net/post/2011/06/16/Forcing-Entity-Framework-to-mark-DateTime-fields-at-UTC.aspx
En bref :
1) Créez le fichier .tt pour votre modèle .edmx (ou .dbml pour Linq-to-SQL)
2) Ouvrez le fichier .tt et trouvez la méthode "WritePrimitiveTypeProperty".
3) Remplacez le code setter existant. C'est tout ce qui se trouve entre les appels de méthode ReportPropertyChanging
et ReportPropertyChanged
par ce qui suit :
<#+ if( ((PrimitiveType)primitiveProperty.TypeUsage.EdmType).PrimitiveTypeKind == PrimitiveTypeKind.DateTime)
{
#>
if(<#=code.FieldName(primitiveProperty)#> == new DateTime())
{
<#=code.FieldName(primitiveProperty)#> = StructuralObject.SetValidValue(value<#=OptionalNullableParameterForSetValidValue(primitiveProperty, code)#>);
<#+
if(ef.IsNullable(primitiveProperty))
{
#>
if(value != null)
<#=code.FieldName(primitiveProperty)#> = DateTime.SpecifyKind(<#=code.FieldName(primitiveProperty)#>.Value, DateTimeKind.Utc);
<#+ }
else
{#>
<#=code.FieldName(primitiveProperty)#> = DateTime.SpecifyKind(<#=code.FieldName(primitiveProperty)#>, DateTimeKind.Utc);
<#+
}
#>
}
else
{
<#=code.FieldName(primitiveProperty)#> = StructuralObject.SetValidValue(value<#=OptionalNullableParameterForSetValidValue(primitiveProperty, code)#>);
}
<#+
}
else
{
#>
<#=code.FieldName(primitiveProperty)#> = StructuralObject.SetValidValue(value<#=OptionalNullableParameterForSetValidValue(primitiveProperty, code)#>);
<#+
}
#>