java - 在其他时区午夜时获取本地时间

标签 java date calendar timezone

我正在尝试获取我的本地时间,当时是不同时区的午夜。 我的意思是:

  • 斯德哥尔摩几点钟,伦敦几点钟?
  • 在赫尔辛基是午夜,在斯德哥尔摩几点钟?

这是我的代码

public static void main(String[] args) throws ParseException {
    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    formatter.setTimeZone(TimeZone.getTimeZone("Europe/Stockholm"));
    Date date = formatter.parse("2013-04-13 00:00:00.000");

    System.out.println("London: " + formatter.format(getFirstInstantOfDay("Europe/London", date)));
    System.out.println("Helsinki: " + formatter.format(getFirstInstantOfDay("Europe/Helsinki", date)));
}

public static Date getFirstInstantOfDay(String timeZoneId, Date date) {
    Calendar resultDate = Calendar.getInstance(TimeZone.getTimeZone(timeZoneId));
    resultDate.setTime(date);
    resultDate.set(Calendar.HOUR, 0);
    resultDate.set(Calendar.MINUTE, 0);
    resultDate.set(Calendar.SECOND, 0);
    resultDate.set(Calendar.MILLISECOND, 0);
    return resultDate.getTime();
}

输出是:

London: 2013-04-12 13:00:00.000
Helsinki: 2013-04-12 23:00:00.000

我预计:

London: 2013-04-13 01:00:00.000
Helsinki: 2013-04-12 23:00:00.000

对于赫尔辛基来说,结果符合预期,但对于伦敦来说,这是一个我不明白它从何而来的疯狂结果。

----- 编辑 -----

具有预期输出的最终代码:

String dateStr = "2013-04-13";

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
formatter.setTimeZone(TimeZone.getTimeZone("Europe/London"));
Date dateGB = formatter.parse(dateStr);
formatter.setTimeZone(TimeZone.getTimeZone("Europe/Stockholm"));
Date dateSE = formatter.parse(dateStr);
formatter.setTimeZone(TimeZone.getTimeZone("Europe/Helsinki"));
Date dateFI = formatter.parse(dateStr);

DateFormat stockholmFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
stockholmFormatter.setTimeZone(TimeZone.getTimeZone("Europe/Stockholm"));


System.out.println("Midnight in London is " + stockholmFormatter.format(dateGB) + " in Stockholm.");
System.out.println("Midnight in Stockholm is " + stockholmFormatter.format(dateSE) + " in Stockholm.");
System.out.println("Midnight in Helsinki is " + stockholmFormatter.format(dateFI) + " in Stockholm.");

输出:

Midnight in London is 2013-04-13 01:00:00.000 in Stockholm.
Midnight in Stockholm is 2013-04-13 00:00:00.000 in Stockholm.
Midnight in Helsinki is 2013-04-12 23:00:00.000 in Stockholm.

最佳答案

尝试将小时更改为 HOUR_OF_DAY。似乎是阅读时间,一次是上午,一次是下午。

更多信息: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

关于java - 在其他时区午夜时获取本地时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15987848/

相关文章:

java - Android:以画中画模式播放视频(点击关闭按钮时多次出现)

java - 302重定向后的HTTP Referer

java - ThreadLocal 与新局部变量相比的真正优势

Java - boolean 逻辑 - 无法识别对象

javascript - 如何将此 javascript 日期选择器日期转换为毫秒?

c# - 在 ASP.NET 日历控件的 OnDayRender 事件期间添加 LinkBut​​tons

html - 如果您用 HTML 编写日历,您会使用 Table 标签还是 Div 标签?

java - 如何洗牌一个ArrayList

ruby-on-rails - 时间前在created_at?

asp.net - 简单的 ajax asp.net 日历扩展器不起作用