使用实体框架迁移来偏移日期时间

本文关键字:日期 时间 迁移 实体 框架 | 更新日期: 2023-09-27 18:16:12

我正在做一个托管在Azure上的后端API,我的日期在不同的时区回来了。我目前获取日期的方式是在我的Migrations文件夹中使用自定义Up()方法,看起来像这样:

public partial class MyMigration : DbMigration
{
    public override void Up()
    {
        CreateTable(
            "dbo.Users",
            c => new
                {
                    Created = c.DateTime(nullable: false, defaultValueSql: "GETDATE()"),
                })
            .PrimaryKey(t => t.ID);
 ... // 

(片段)

我一直在阅读sysdatetimeoffset()datetimeoffset(),但我不知道如何在这种情况下使用它们。

是否有一种方法可以使用实体框架代码优先迁移设置数据库生成的默认DateTime偏移量?

使用实体框架迁移来偏移日期时间

Azure时间(SQL, web应用程序,云服务)总是在UTC时间。如果你想让API返回特定时区的时间,最好使用。net资源将UTC时间转换为你感兴趣的时区,并让Azure处理/存储UTC时间。请参阅在MSDN上转换时区之间的时间,特别是将UTC转换为指定时区:

DateTime timeUtc = DateTime.UtcNow;
try
{
   TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
   DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone);
   Console.WriteLine("The date and time are {0} {1}.", 
                     cstTime, 
                     cstZone.IsDaylightSavingTime(cstTime) ?
                             cstZone.DaylightName : cstZone.StandardName);
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The registry does not define the Central Standard Time zone.");
}                           
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the Central Standard Time zone has been corrupted.");
}