我使用默认示例在表存储中存储日期时间值。一个字段计算如下
DateTime accMonth = new DateTime(DateTime.Now.Year,
DateTime.Now.Month, 1);
通常上面是指时间为00:00的日期。
但是当我将其保存在表存储中时,我将此时间视为
2018-04-01T18:30:00.000Z
这对我来说很奇怪!有谁知道为什么?
答案 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; }
}
屏幕截图是: