将日期时间存储在azure表存储中

时间:2018-04-26 08:47:17

标签: c# azure azure-storage azure-table-storage

我使用默认示例在表存储中存储日期时间值。一个字段计算如下

DateTime accMonth = new DateTime(DateTime.Now.Year, 
    DateTime.Now.Month, 1);

通常上面是指时间为00:00的日期。

但是当我将其保存在表存储中时,我将此时间视为

2018-04-01T18:30:00.000Z

这对我来说很奇怪!有谁知道为什么?

2 个答案:

答案 0 :(得分:3)

您获得了不同的价值,因为您正在创建一个包含当地时区的日期/时间(印度是GMT + 5:30)。在Azure存储中,日期/时间值保存为UTC。

SDK正在做的是将此日期转换为UTC,然后保存该日期。这就是为什么您在设置日期/时间值之前5:30才能看到日期/时间值的原因。

Edm.DateTime under Property Types

要解决此问题,请将日期/时间类型指定为UTC。然后SDK不会进行任何转换。所以你的代码是:

var accMonth = new DateTime(DateTime.Now.Year, 
            DateTime.Now.Month, 1, 0, 0, 0, DateTimeKind.Utc);

答案 1 :(得分:1)

您似乎希望将DateTime格式化为: yyyy-MM-dd 00:00:00

如果是这样,您可以使用以下代码来实现:

DateTime accMonth = new DateTime(DateTime.Now.Year,DateTime.Now.Month, 1);
string formatted = accMonth.ToLongTimeString();
double hour = DateTime.Now.Hour;
customer1.date = Convert.ToDateTime(formatted).AddHours(-hour+1);

完整的代码如下:

private static void Main()
{
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));

    CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

    CloudTable table = tableClient.GetTableReference("people");

    CustomerEntity customer1 = new CustomerEntity("Harp1", "Walter1");

    DateTime accMonth = new DateTime(DateTime.Now.Year,DateTime.Now.Month, 1);
    string formatted = accMonth.ToLongTimeString();
    double hour = DateTime.Now.Hour;
    customer1.date = Convert.ToDateTime(formatted).AddHours(-hour+1);

    TableOperation insertOperation = TableOperation.Insert(customer1);

    table.Execute(insertOperation);
}

public class CustomerEntity : TableEntity
{
    public CustomerEntity(string lastName, string firstName)
    {
        this.PartitionKey = lastName;
        this.RowKey = firstName;
    }

    public CustomerEntity() { }

    public DateTime date { get; set; }
}

屏幕截图是:

enter image description here