如何在给定时区的12:00 AM获取本地时间戳

时间:2014-02-03 20:55:18

标签: java jodatime

我的时间字符串指定为“12:00”或“12:00 AM”。我希望得到的时间戳对应于今天那个时代的纽约,当然今天自然会每天都在变化。所以我的方法就像是

new DateTime("12:00AM", DateTimeZone.forID(timezone));

但我得到了

IllegalArgumentException: Invalid format: "12:00AM"

我正在使用Joda时间。有谁知道怎么做对吗?我需要在java中做出回应。

3 个答案:

答案 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");