我的时间字符串指定为“12:00”或“12:00 AM”。我希望得到的时间戳对应于今天那个时代的纽约,当然今天自然会每天都在变化。所以我的方法就像是
new DateTime("12:00AM", DateTimeZone.forID(timezone));
但我得到了
IllegalArgumentException: Invalid format: "12:00AM"
我正在使用Joda时间。有谁知道怎么做对吗?我需要在java中做出回应。
答案 0 :(得分:0)
Joda需要24小时的时间。还要用这样的大写字母T来表示你的时间:
DateTime dt = new DateTime("T00:00", DateTimeZone.forID("US/Eastern"));
他们在用户指南中提供的示例如下所示:
DateTime dt = new DateTime("2004-12-13T21:39:45.618-08:00");
用户指南中有更多示例:Link
答案 1 :(得分:0)
您是否查看了DateTime
的文档?
您可以使用此构造函数:
//DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, DateTimeZone zone)
DateTime dt = new DateTime(2014,2,1,12,00,"UTC-07:00");
答案 2 :(得分:0)
这是一个链接,它提供了代码失败原因的准确答案。
关于DateTime-constructor with Object and DateTimeZone的javadoc声明: “字符串格式由ISODateTimeFormat.dateTimeParser()描述。”其中links:
datetime = time | date-opt-time
time = 'T' time-element [offset]
date-opt-time = date-element ['T' [time-element] [offset]]
date-element = std-date-element | ord-date-element | week-date-element
std-date-element = yyyy ['-' MM ['-' dd]]
ord-date-element = yyyy ['-' DDD]
week-date-element = xxxx '-W' ww ['-' e]
time-element = HH [minute-element] | [fraction]
minute-element = ':' mm [second-element] | [fraction]
second-element = ':' ss [fraction]
fraction = ('.' | ',') digit+
offset = 'Z' | (('+' | '-') HH [':' mm [':' ss [('.' | ',') SSS]]])
由于每个人都可以清楚地看到构造函数支持的字符串格式中没有AM / PM标记。相反,只需要ISO-8601格式。我不知道你是如何解释像“12:00”这样的字符串,如果还需要像“12:00 AM”这样的字符串作为输入。但这是常见的做法,Joda Time也将其作为ISO格式的“T00:00”解释为“12:00 AM”,即一天开始时的午夜。因此,如果您需要不同的输入格式,可以先进行一些预处理。否则你应该认真考虑Joda Time的format-engine:
DateTime dt =
DateTimeFormat.forPattern("hh:mma")
.withZone(DateTimeZone.forID(timezone))
.parseDateTime("12:00AM");