如何在joda的LocalTime
中设置所需的时区?所需时区 - 莫斯科。
默认构造函数new LocalTime()
为我显示了其他时间:它显示时间,比我的时区提前一小时。
答案 0 :(得分:2)
LocalTime
时区。这就是它的全部意义。
如果您想要特定时区内特定时刻的LocalTime
,则可以使用DateTime
然后使用toLocalTime
:
DateTime now = new DateTime(zone); // Urgh: see below
LocalTime localNow = now.toLocalTime();
请注意,我强烈建议使用表示时钟的依赖项来提供当前时刻" - 然后你可以使用"系统"实现通过System.currentTimeMillis
等返回当前时间,但您也可以 使用"测试"实现返回预定义的时间,允许您在任何时刻编写单元测试。
有了这样的依赖关系,你可能会有类似的东西:
DateTime now = new DateTime(clock.getCurrentInstant(), zone);
LocalTime localNow = now.toLocalTime();
答案 1 :(得分:1)
Jon Skeets建议注射时钟是好的和好的。否则 - 并且更接近您的问题 - 您应该使用LocalTime
DateTimeZone
接受LocalTime time = new LocalTime(DateTimeZone.forID("Europe/Moscow"));
- 参数,以便不依赖于您的系统时区,这可能不是您想要的:< / p>
System.currentTimeMillis()
它是如何运作的?
首先,Joda-Time通过import boto
from boto.s3.key import Key
import requests
#setup the bucket
c = boto.connect_s3(your_s3_key, your_s3_key_secret)
b = c.get_bucket(bucket, validate=False)
#download the file
url = "http://en.wikipedia.org/static/images/project-logos/enwiki.png"
r = requests.get(url)
if r.status_code == 200:
#upload the file
k = Key(b)
k.key = "image1.png"
k.content_type = r.headers['content-type']
k.set_contents_from_string(r.content)
使用标准系统时钟并获取全局时间戳。为了得出当地时间部分,Joda-Time必须知道时区参考。这就是你在这里定义的。该区域仅用于转换,没有别的。在构建新的本地时间(没有关于时区的内部知识)之后,Joda-Time不再需要记录的区域参考。
<强>更新强>
如果您的系统时区已经是“Europe / Moscow”(没有args的构造函数使用系统tz!),您应该检查您的Joda-Time版本。也许你已经过时了包含旧dst规则的时区数据。下载最新版本的v2.8可能有助于防止旧数据。