2

私は紺碧のテーブルストレージを使用しており、特定の日のみレコードをフィルタリングしようとしています。晴れのタイムスタンプのフィルタリングで間違った日付が選択される

datetime filterDate = '3/29/2016 12:00:00 AM' 

私は、以下のクエリをしようとしたが、それは、29日と30日の両方のレコードを引っ張ります。何が問題なのでしょうか?

var queryToday = TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.GreaterThanOrEqual, filterDate); 
      var querySelectedDate = TableQuery.CombineFilters(queryToday, TableOperators.And, TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.LessThan, filterDate.AddDays(1))); 

(Timestamp ge datetime'2016-03-29T07:00:00.0000000Z') and (Timestamp lt datetime'2016-03-30T07:00:00.0000000Z') 

答えて

2

は、タイムゾーンの問題のように見えるように私は、フィルタ文字列をデバッグして発見しました。おそらく、真夜中の3/29から真夜中の3/30までを検索したいと思うかもしれませんが、代わりに午前7時3分29秒と午前7時3分30秒の間を検索しています。

UTC-7タイムゾーン(MDTなど)またはUTC +7タイムゾーン(ETCなど)のいずれかに住んでいますか?このapiはあなた/あなたのサイトのタイムゾーンと、タイムスタンプがあると仮定するタイムゾーン(おそらくUTCタイム)を補うためのものです。

+0

非常に興味深い。 .AddHours(-7)? その意味ですか? var queryToday = TableQuery.GenerateFilterConditionForDate( "Timestamp"、QueryComparisons.GreaterThanOrEqual、filterDate.AddHours(-7)); var querySelectedDate = TableQuery.CombineFilters(queryToday、TableOperators.And、TableQuery.GenerateFilterConditionForDate( "Timestamp"、QueryComparisons.LessThan、filterDate.AddDays(1).AddHours(-7))); – Kurkula

2

まず、時刻をUTCに変換してください。

var universalFilterDate = filterDate.ToUniversalTime(); 
var queryToday = TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.GreaterThanOrEqual, universalFilterDate); 
var querySelectedDate = TableQuery.CombineFilters(queryToday, TableOperators.And, TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.LessThan, universalFilterDate.AddDays(1))); 
1

私はWindows Azure Storage 7.0.0を使用していますが、あなたがUTCに変換する必要がないように、LINQクエリを使用することができます。

// initialize the filterdate 
var filterDate = DateTime.Parse("01/02/2016 12:00:00 AM"); 

// Get the cloudtable ... 
var cloudTable = GetCloudTable(); 

// Create a query: in this example I use the DynamicTableEntity class 
var query = cloudTable.CreateQuery<DynamicTableEntity>() 
    .Where(d => d.Timestamp > filterDate); 

var result = query.ToList(); 

あなたがquery.FilterStringプロパティを検査する場合は、日時を持っていることがわかります

:UTCの日時に変換されて、 "タイムスタンプGT datetime'2016-01-31T11:00:00Z」"

関連する問題