我在#import the necessary packages
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2
#initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 32
rawCapture = PiRGBArray(camera, size=(640, 480))
#allow the camera to warmup
time.sleep(0.1)
#capture frames from the camera
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
# grab the raw NumPy array representing the image, then initialize the timestamp
# and occupied/unoccupied text
image = frame.array
image.setflags(write=True)
cv2.imshow("Frame", image)
key = cv2.waitKey(1) & 0xFF
# clear the stream in preparation for the next frame
rawCapture.truncate(0)
# if the q key was pressed, break from the loop
if key == ord("q"):
break
cv2.destroyAllWindows()
中有UTC的日期和时间。我想显示给定区域的时间和日期,但无论区域我得到的是同一时间。对于以下代码:
LocalDateTime lastUpdated
我得到了:
System.out.println(lastUpdated);
System.out.println(lastUpdated.atZone(ZoneId.of("Europe/Paris")));
System.out.println(lastUpdated.atZone(ZoneId.of("America/Los_Angeles")));
但我想得到的是:
2018-05-26T21:33:46
2018-05-26T21:33:46+02:00[Europe/Paris]
2018-05-26T21:33:46-07:00[America/Los_Angeles]
区域信息对我来说是可选的。我只需要在区域适当的时间。有没有办法实现它?
答案 0 :(得分:4)
我的印象是你把“无时区信息”与“UTC时区”混淆等同......因为当我不说时区是什么时候它是UTC ......对吗?
错误。如果您没有说出时区是什么,那么您没有关于时区的任何具体信息。
所以你的2018-05-26T21:33:46不是日期和时间,UTC,它是这个日期的日期和时间的概念,不知道时区的概念存在。当你去问某人今天的日期和现在的时间时,你会得到什么。不,他们不会认为你可能也想要考虑它在你现在所在的时区。那个人根本就不会想到有时区这样的东西,但他会能告诉它是什么日子和时间。
因此,要将日期时间UTC转换为其他时区的日期时间,请执行以下操作:
ZonedDateTime time = lastUpdated.atZone(ZoneId.of("UTC"));
System.out.println(time);
System.out.println(time.withZoneSameInstant(ZoneId.of("Europe/Paris")));
System.out.println(time.withZoneSameInstant(ZoneId.of("America/Los_Angeles")));
答案 1 :(得分:1)
您正在使用LocalDateTime
,这是一个没有时区的日期和时间指示,就像您在自己的时区与人讨论日期和时间时所使用的那样。 atZone
会及时返回该日期的ZonedDateTime
,就像您在该时区发表的那样。
因此,为了获得不同的时间,您需要将ZonedDateTime
转换为Instant
,这是一个时间点,为整个星球确定。然后Instant
可以再次转换为ZonedDateTime
。
LocalDateTime lastUpdated = LocalDateTime.now();
ZonedDateTime zonedDateTime = lastUpdated.atZone(ZoneId.of("Europe/Paris"));
System.out.println(zonedDateTime);
ZonedDateTime other = ZonedDateTime.ofInstant(zonedDateTime.toInstant(), ZoneId.of("America/Los_Angeles"));
System.out.println(other);
输出:
2018-05-27T21:53:53.754+02:00[Europe/Paris]
2018-05-27T12:53:53.754-07:00[America/Los_Angeles]