matobaの学んだこと

とあるPythonエンジニアのブログ

aware/nativeなdatetimeと翻訳のニュアンスの話

djangoで時刻を扱おうとしました。すると、timezoneのあたりで困りました。

そして、timezoneについて調べてたら、 awareなdatetimenativeなdatetime という話がでてきました。これが何を言っているかわかりませんでした。だから調べました。

というわけで、これはなに?って部分を書きます。

awareやnativeという話は、以下のURLで見つけました。

is_aware() is_naive() を使って、datatime を aware にするか naive にするかを決めることもできます。 引用 タイムゾーン | Django documentation | Django

この文章を見て、僕は、「aware/naiveなdatetimeってなんやねん。」と思ったりしました。

で、調べたところ、Pythonの公式ドキュメントに説明がありました。

"naive" と "aware" の2種類の日付と時刻オブジェクトがあります。 引用 8.1. datetime — 基本的な日付型および時間型 — Python 3.6.4 ドキュメント

詳細は、ドキュメントに書いてますが、簡単にいうと

です。

  • awareなdatetimeオブジェクトをnaiveに変換するときは、設定されているタイムゾーンを考慮して変換する。
  • naiveなdatetimeオブジェクトをawareに変換するときは、タイムゾーンの情報を追加する。

です。

ふむふむ。なるほど、と思って、Djangoのドキュメントに戻りました。

すると、直前にこう書いてありました。

Python の datetime.datetime のオブジェクトには、タイムゾーン情報を保持するために使える tzinfo 属性があり、これは datetime.tzinfo のサブクラスのインスタンスで表されます。 この属性がセットされオフセットを示すとき、datetime オブジェクトは aware となります。それ以外の場合は naive となります。

「あっ、もしかして aware となります naive となりますなります って、transform とか become じゃないのかな?」と思って、翻訳前を見るとその箇所は、次のように書いてました。

When this attribute is set and describes an offset, a datetime object is aware. Otherwise, it’s naive.

なるほど。 isでした。

英語を日本語に翻訳するときのニュアンスって難しいなあと思いました。

なんとなくの想像では、この英語ドキュメントを書いた人は、DjangoのDatetimeとTimezoneの扱いの便利さを伝えたくてこの文章を書いていて、その前提知識として、awareとnaiveを説明したと思うんですが、翻訳した人は、DjangoのDatetimeとTimezoneの扱いを理解するために、awareとnaiveを学んだのかなーとか思いました。

英語ドキュメントを書いた人と翻訳した人の気持ちを考えないと、なんでこの話をしてるのかわからないなあ、と思ったりしました。