- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将具有特定时区(欧洲/巴黎)的时间戳转换为 UTC 日期时间格式。在我的笔记本电脑上,它适用于下面的解决方案,但是当我在远程服务器(爱尔兰的 AWS-Lambda 函数)中执行我的代码时,我需要轮类 1 小时,因为服务器的本地时区与我的不同。我怎样才能拥有可以在我的笔记本电脑上工作并同时在远程服务器上工作的代码(动态处理本地时区)?
import pytz
import datetime
def convert_timestamp_in_datetime_utc(timestamp_received):
utc = pytz.timezone('UTC')
now_in_utc = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(pytz.UTC)
fr = pytz.timezone('Europe/Paris')
new_date = datetime.datetime.fromtimestamp(timestamp_received)
return fr.localize(new_date, is_dst=None).astimezone(pytz.UTC)
谢谢
最佳答案
我不确定 timestamp_received
是什么,但我想你想要的是 utcfromtimestamp()
import pytz
from datetime import datetime
def convert_timestamp_in_datetime_utc(timestamp_received):
dt_naive_utc = datetime.utcfromtimestamp(timestamp_received)
return dt_naive_utc.replace(tzinfo=pytz.utc)
为了完整起见,这是通过引用 python-dateutil
来完成相同事情的另一种方法。的 tzlocal
时区:
from dateutil import tz
from datetime import datetime
def convert_timestamp_in_datetime_utc(timestamp_received):
dt_local = datetime.fromtimestamp(timestamp_received, tz.tzlocal())
if tz.datetime_ambiguous(dt_local):
raise AmbiguousTimeError
if tz.datetime_imaginary(dt_local):
raise ImaginaryTimeError
return dt_local.astimezone(tz.tzutc())
class AmbiguousTimeError(ValueError):
pass
class ImaginaryTimeError(ValueError):
pass
(我添加了 AmbiguousTimeError
和 ImaginaryTimeError
条件来模仿 pytz
接口(interface)。)请注意,我包括这个以防万一你有一个类似的问题,出于某种原因需要引用本地时区 - 如果你有一些东西可以在 UTC 中给你正确的答案,最好使用它然后使用 astimezone
来将它放入您想要的任何本地区域。
工作原理
既然你在评论中表示你对它的工作原理仍然有点困惑,我想我会澄清为什么它有效。有两个函数可以将时间戳转换为 datetime.datetime
对象,datetime.datetime.fromtimestamp(timestamp, tz=None)
和 datetime.datetime.utcfromtimestamp(timestamp)
:
utcfromtimestamp(timestamp)
会给你一个 naive datetime
来表示 UTC 时间。然后您可以执行 dt.replace(tzinfo=pytz.utc)
(或任何其他 utc
实现 - datetime.timezone.utc
,dateutil.tz.tzutc()
等)以了解日期时间并将其转换为您想要的任何时区。
fromtimestamp(timestamp, tz=None)
,当 tz
不是 None
时,会给你一个意识 datetime
等同于 utcfromtimestamp(timestamp).replace(tzinfo=timezone.utc).astimezone(tz)
。如果 tz
是 None
,它不会转换指定的时区,而是转换为您的本地时间(相当于 dateutil.tz.tzlocal()
),然后返回一个naive datetime
。
从 Python 3.6 开始,您可以使用 datetime.datetime.astimezone(tz=None)
在 naive 日期时间上,时区将被假定为系统本地时间。因此,如果您正在开发 Python >= 3.6 应用程序或库,您可以使用 datetime.fromtimestamp(timestamp).astimezone(whatever_timezone)
或 datetime.utcfromtimestamp(timestamp).replace(tzinfo =timezone.utc).astimezone(whatever_timezone)
作为等价物。
关于Python 将具有特定时区的时间戳转换为 UTC 中的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41613849/
给定一个带有多个 date_time 戳的字符串,我想 提取第一个戳及其前面的文本 候选字符串可以有一个或多个时间戳 后续的 date_time 戳记将被 sep="-" 隔开 后续date_time
是否可以合并从相机拍摄的文本和照片?我想在照片上标记日期和时间,但我在 Google 上找不到任何内容。 最佳答案 使用下面的代码来实现你所需要的。 Bitmap src = Bitm
有没有办法通过 Graph API 戳另一个用户?基于this post ,并使用 Graph Explorer ,我发布到“/USERID/pokes”,我已经授予它(Graph API 应用程序和
我有两个向左浮动的元素。一个是 body 的第一个 child ,另一个是容器的第一个 child ,容器是 body 的第二个 child 。 ...
我是一名优秀的程序员,十分优秀!