2017-03-03 4 views
-1

GAE(Python with ndb library)で保存された日付に関する奇妙な結果。 Webフォームからの受信文字列は、%a%m /%d /%y形式(3/3/17金)です。 これはdatetime.strptimeで解析され、日付の値を取得します。 DateProperty()フィールドに保存されるとき、その値は一貫して前日の16:00:00.000 PSTになります。DatePropertyの日付エラー()ndb経由で保存

 postDate = datetime.datetime.strptime(self.request.get('date-'+ 
      hashed_id),'%a %m/%d/%y') 
     logging.info('postDate as Date: %s',postDate) 
     postDateStr = datetime.datetime.strftime(postDate,'%D') 
     logging.info('postDateStr: %s',postDateStr) 
     thisPost = ScheduledPost(id = postID, 
      ... 
      postDate = postDate, 
      postDateStr = postDateStr 
      ) 

ログの結果:

postDate as Date: 2017-03-03 00:00:00 
    postDateStr: 03/03/17 

これまでのところは良い、右?データストアインターフェイスでは、そのレコードには次の情報が表示されます。

PostDate: 2017-03-02 (16:00:00:000 PST) 
    PostDateStr: 03/03/17 

ワークステーションは太平洋時間帯ですが、日付が間違っていることを確認しているようです。今日は3/3/17と仮定 -

today = dt.datetime.now() 
    ScheduledPost.query(ScheduledPost.postDate == today).fetch() 

返されたレコードがありません。

日付を文字列として保存し、日付を文字列として照会することは、このプロジェクトの回避策です。誰かがこれを見たことがあると思っただけです。助言?

+0

update: 'code'として定義された2番目のフィールドが追加されました。DateTimeProperty() - 同じエラー値が保存されました。 –

答えて

0

appengineで生成しているdatetimeはUTCで、タイムゾーン情報なしでそのdatetimeとして格納されます。 あなたがそれを見ているとき、それは太平洋時間に変換されています。

あなたが行っているクエリは正しくありません:dateではなくdatetimeが生成されているため、比較している時間が異なることになります。

+0

ありがとう!視聴者が私のためにローカライズしていた日付を知らなかった。 –

関連する問題