将日期转换为c#中的刻度(用于表存储查询)

时间:2013-01-09 12:36:30

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

我有一个表存储,其中分区键是每秒生成的DateTime滴答。

我想通过查询当时生成的分区键来检索特定日期的记录。

我想我需要一种方式来提供日期并将其转换为刻度。或者有更好的查询方法吗?

2 个答案:

答案 0 :(得分:3)

听起来您需要日期时间.Ticks属性:

http://msdn.microsoft.com/en-gb/library/system.datetime.ticks.aspx

如果没有真正的数据结构,您可能需要某种查询来获取所需的所有记录,可能会提供两个日期。

请注意,如果不通过C#生成ticks键,那么您可能需要使用生成tick的任何机制来获得相同精度的密钥,请参阅下面的t-sql示例链接:

T-sql, ticks, timestamp

答案 1 :(得分:3)

实际上,除了简单地使用.Ticks之外,还有更多内容。我刚才在博客上写道:NuGet package for creating and querying Table Storage entities in (reverse) chronological order。 NuGet包(支持旧的和新的Table Storage SDK)允许您根据当前时间创建实体,并允许您查询它们(甚至支持日期范围)。

创建实体(查看RowKey.CreateChronological

foreach (var blogPost in BlogReader.Read())
{
    table.Execute(TableOperation.Insert(new Model.BlogPostEntity()
    {
        Author = blogPost.Author,
        PartitionKey = "WindowsAzure",
        PublishedOn = blogPost.PublishedOn,
        Title = blogPost.Title,
        RowKey = RowKey.CreateChronological(blogPost.PublishedOn)
    }));
}

查询实体(查看QueryDateReverseChronologicalComparisons.After

var ctx = new Microsoft.WindowsAzure.Storage.Table.DataServices.TableServiceContext(table.ServiceClient);
var query = ctx.CreateQuery<BlogPostTableServiceEntity>("ChronoTableStorageSample")
               .Where(QueryDateReverseChronologicalComparisons.After, 
                        DateTime.Parse("2012-12-10 00:00:00"));

foreach (var blogPost in query)
{
    Console.WriteLine("{0:yyyy-MM-dd}: {1}", blogPost.PublishedOn, blogPost.Title);
}