当前位置: 首页 > 面试题库 >

Java SimpleDateFormat将结果解析一小时(是的,我设置了时区)

司浩壤
2023-03-14
问题内容

让我感到困惑:为什么这个简单的JUnit断言失败?

public void testParseDate() throws ParseException {
    final SimpleDateFormat formatter = new SimpleDateFormat(
            "yyyy-MM-dd HH:mm:ss z");
    formatter.setTimeZone(UTC);
    final Calendar c = new GregorianCalendar();
    c.setTime(formatter.parse("2013-03-02 11:59:59 UTC"));

    assertEquals(11, c.get(HOUR_OF_DAY));
}

我本来希望一天中的小时为11,但根据JUnit,一天中的小时为12。

junit.framework.AssertionFailedError: expected:<11> but was:<12>
at junit.framework.Assert.fail(Assert.java:47)
    ... snip ...

问题答案:

阳历的默认构造函数使用计算机的本地时区。如果与UTC不同,则会出现此现象。尝试使用GregorianCalendar(TimeZone)构造函数并将UTC传递给该构造函数。

这将起作用:

public void testParseDate() throws Exception {

    TimeZone UTC = TimeZone.getTimeZone("UTC");

    // Create a UTC formatter
    final SimpleDateFormat formatter = new SimpleDateFormat(
            "yyyy-MM-dd HH:mm:ss z");
    formatter.setTimeZone(UTC);

    // Create a UTC Gregorian Calendar (stores internally in UTC, so
    // get(Calendar.HOUR_OF_DAY) returns in UTC instead of in the
    // local machine's timezone.
    final Calendar c = new GregorianCalendar(UTC);

    // Ask the formatter for a date representation and pass that
    // into the GregorianCalendar (which will convert it into
    // it's internal timezone, which is also UTC.
    c.setTime(formatter.parse("2013-03-02 11:59:59 UTC"));

    // Output the UTC hour of day
    assertEquals(11, c.get(Calendar.HOUR_OF_DAY));
}


 类似资料:
  • 我将teformat构造函数简化为 我正在解析字符串“2013-09-29T18:46:19Z”。 我读到这里Z代表时区。但是当我在控制台上打印这个日期时,它会为返回的日期打印IST timezne。 现在我的问题是我的输出是对还是错?

  • 问题内容: 需要帮助解析… 在我的代码中,我有一个返回url.getHost();的方法。但是结果可能是blarg.com,有时甚至是date.blarg.com。我想针对两种情况(或xxx.yyy.ggg.blarg.com)返回blarg.com。 我能做到吗? 谢谢! 编辑:getHost()来自Java的内置类java.net.URL。 问题答案:

  • 我是MVVMCROSS6.0和Xamarin的新手。 null ConfigurationChanges=ConfigChanges.Screensize ConfigChanges.Orientation)]公共类MainActivity:MvxFormsAppCompatActivity{protected override void OnCreate(Bundle Bundle){TabLa

  • 网络编程中经常使用gethostbyname和getaddrinfo来实现域名解析,这两个C函数并未提供超时参数。实际上可以修改/etc/resolv.conf来设置超时和重试逻辑。 !> 可参考man resolv.conf文档 多个 NameServer nameserver 192.168.1.3 nameserver 192.168.1.5 option rotate 可配置多个names

  • 问题内容: 我的数据库中有两个表: NEWS表的列: -新闻ID -作者的用户ID) 带有列的USERS表: -用户ID 我要执行此SQL: 当我在PHP中获得结果时,我想获取关联数组并通过获取列名。如何获得具有相同列名的新闻ID和用户ID? 问题答案: 您可以为所选的列设置别名:

  • 我读过MP4Box文档中关于Mpeg Dash的内容,但我不太清楚“MP4Box-Dash 10000-frag 2000 largeFile.mp4”和MP4Box-Dash 10000-frag 1000 largeFile。mp4。当我打开*。mpd文件我发现SegmentList的持续时间是10023(大约10秒)。如果未使用? 我正在设计一个HTML5视频播放器(就像这个示例),我使用M