Хранение DateTime в хранилище Azure Table - PullRequest
0 голосов
/ 26 апреля 2018

Я использую пример по умолчанию для хранения значения datetime в табличном хранилище. Одно поле рассчитывается следующим образом

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

Обычно выше означает дату со временем 00:00.

Однако, когда я сохраняю это в табличном хранилище, я вижу это время как

2018-04-01T18:30:00.000Z

Что выглядит странно для меня! кто-нибудь знает почему?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Вы получаете другое значение, потому что вы создаете дату / время с местным часовым поясом (Индия: GMT + 5: 30).В хранилище Azure значения даты и времени сохраняются как UTC.

SDK выполняет преобразование этой даты в UTC, а затем сохраняет эту дату.Вот почему вы видите значение даты / времени за 5:30 часов до установленного значения даты / времени.

Edm.DateTime в разделе Типы свойств

Чтобы решить эту проблему, укажите дату / время в формате UTC.Тогда SDK не будет выполнять никаких преобразований.Итак, ваш код будет:

var accMonth = new DateTime(DateTime.Now.Year, 
            DateTime.Now.Month, 1, 0, 0, 0, DateTimeKind.Utc);
0 голосов
/ 26 апреля 2018

Кажется, вы хотите отформатировать DateTime следующим образом: гггг-мм-дд 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...