在java中生成UTC时间

我想将Java 01/01/2100的UTC时间改为’2100-01-01 00:00:00’。 我正在收到“2100-01-01 00:08:00”。 任何想法,如何纠正这一点。

public Date getFinalTime() { Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); Date finalTime = null; try { finalTime = df.parse("01/01/2100"); } catch (ParseException e) { e.printStackTrace(); } calendar.setTime(finalTime); return calendar.getTime(); } 

您还需要为SimpleDateFormat指定时区 – 目前正在解析午夜当地时间 ,最终结束时间为UTC 时间上午8点。

 TimeZone utc = TimeZone.getTimeZone("UTC"); Calendar calendar = Calendar.getInstance(utc); DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); df.setTimeZone(utc); Date finalTime = null; try { finalTime = df.parse("01/01/2100"); } catch (ParseException e) { e.printStackTrace(); } calendar.setTime(finalTime); 

虽然如此,我个人会建议使用Joda Time ,它一般来说function更强大。 如果你愿意的话,我很乐意将你的例子翻译成Joda Time。

另外,我看到你正在返回calendar.getTime() – 这与你计算它后立即返回finalTime相同。

最后,只是捕获一个ParseException并继续进行,好像它没有发生是一个非常糟糕的主意。 我希望这只是示例代码,它并不反映您的真实方法。 同样地,我假设你真的会解析其他一些文本 – 如果你不是,那么正如Eyal所说,你应该直接在Calendar上调用方法。 (或者,再次使用Joda Time。)

您还需要设置SimpleDateFormat对象的时区,否则它将采用默认时区。

无论如何,在您的情况下,似乎只使用日历就足够了。 使用其setter为所有字段(年,月,日,小时等)设置正确的值,然后检索时间。