5

簡単な質問です(私は思います)。

DateTimeフィールド(auto_add_now)があり、テンプレートに出力するとき

{{ edited|date:"DATETIME_FORMAT" }}

「2012年9月16日12:01pm」という期待通りの結果が得られました

しかし、残念ながら、Backbone.jsを使用していて、JSONで日時を渡す必要があるため、状況は少し複雑になります。また、表示目的でのみ使用されるため、ロケール形式の文字列として渡すことにしました。そこで、コードを掘り下げて、テンプレートタグが何を使用しているかを見つけました。これが、私が設定したものです。

from django.utils.formats import date_format
return {
    'created': date_format(self.created, 'DATETIME_FORMAT'),
}

しかし、それはこの「2012年9月16日午後5時1分」で終わります

テンプレートタグの以下と関係がある気がします

@register.filter(expects_localtime=True, is_safe=False)

私もこれを試しましたが、同じ結果になりました

from django.utils import timezone
tz = timezone.get_current_timezone()
logger.info(tz)
logger.info(self.edited)
logger.info(format(self.edited, 'DATETIME_FORMAT'))
logger.info(self.edited.replace(tzinfo=tz))
logger.info(format(self.edited.replace(tzinfo=tz), 'DATETIME_FORMAT'))

これは私にこれを与えました

INFO: America/Chicago
INFO: 2012-09-16 17:01:52.921276+00:00
INFO: Sept. 16, 2012, 5:01 p.m.
INFO: 2012-09-16 17:01:52.921276-06:00
INFO: Sept. 16, 2012, 5:01 p.m.

そうですね、私は何かが足りないに違いありません。私はdjangoのドキュメントを上下に移動していて、自分が間違っていることを指摘できるものを見つけることができません。助けてくれてありがとう。

4

2 に答える 2

10

私はそれを考え出した。そして悲しいことに、私が使い果たしたと思ったのは Django Timezones のドキュメントでした。使用法をローカライズする timezone.localtime()

from django.utils.formats import date_format
from django.utils import timezone
date_format(timezone.localtime(page.created), 'DATETIME_FORMAT')
于 2012-09-22T20:29:10.373 に答える
1

たぶん、以下があなたを助けるでしょう。

>>> obj = MyModel.objects.get(...)
>>> data = {"date_format": obj.edited}
>>> from django.core.serializers.json import DjangoJSONEncoder
>>> data = json.dumps(data, cls=DjangoJSONEncoder)
>>> data
'{"date_format": "2012-09-16T21:45:46Z"}'

ビューから json 形式のデータを送信します。

E.g return HttpResponse(data, mimetype='application/json').      

そして、クライアント側のコードで、次のdate_formatようにローカル タイムゾーンに変換できます: (responseが JSON 解析オブジェクトであると仮定します)

var d = new Date(Date.parse(response.date_format));
// Sun Sep 16 2012 22:45:46 GMT+0100 (BST)
于 2012-09-16T22:23:51.990 に答える