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

使单元测试的日期在所有时区都通过,并且带/不带夏令时

赏梓
2023-03-14
问题内容

如何使该单元测试在所有时区都通过测试,而与DST是否处于活动状态无关?

import static org.junit.Assert.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.joda.time.DateTime;
import org.junit.Test;

public class TimeZoneTest {

    private final static SimpleDateFormat DATE_FORMAT = new SimpleDateFormat( "yyyy.MM.dd'T'HH:mm.ss:SSSZZ" );

    @Test
    public void testUtilDateMillis() throws Exception {
        assertEquals( "1970.01.01T00:00.00:000+0000", DATE_FORMAT.format( new Date( 0L ) ) );
    }

    @Test
    public void testDateTimeMillis() throws Exception {
        assertEquals( "1970-01-01T00:00:00.000+00:00", new DateTime( 0L ).toString() );
    }
}

问题答案:

默认情况下,新用户SimpleDateFormat将使用系统默认时区。如果您想要一个特定的时区,请致电setTimeZone

private final static SimpleDateFormat DATE_FORMAT = createFormat();

private static SimpleDateFormat createFormat() {
    // Make sure there are no locale-specific nasties, either...
    SimpleDateFormat ret = new SimpleDateFormat("yyyy.MM.dd'T'HH:mm.ss:SSSZZ",
                                                Locale.US);
    ret.setTimeZone(TimeZone.getTimeZone("Etc/UTC");
}

对于第二项测试,您想要将其更改为:

new DateTime(0L, DateTimeZone.UTC);

请注意,通常不应该使用静态SimpleDateFormat变量,因为它不是线程安全的。(而Joda Time DateTimeFormatter实现 线程安全的。)



 类似资料:
  • 问题内容: 我有一个返回例如DateTime对象的Web服务:DepartureDate。我使用ajax来获取此代码,并在我看来使用此功能将JSON日期字符串转换为javascript日期对象: 问题是要考虑到客户端计算机上的本地时间,因此不同国家/地区的客户端会获得不同的日期。我想获取从Web服务返回的确切日期。有没有简单的方法可以做到这一点? 问题答案: 问题是考虑了客户端计算机上的本地时间

  • 问题内容: 我有一条指令,该指令的行为应有所不同,具体取决于自初始化以来经过的时间: 问题是,当我尝试使用Jasmine进行测试时,我似乎找不到以任何方式触发此超时的方法。已经尝试了和(如果我要注释调用,实际上会引发错误)。但是它仍然没有触发超时的回调执行 测试失败。 找不到我在做什么错。关于如何正确测试这种情况的任何提示? 谢谢。 UPD 经过一番调查,我发现在此特定的测试用例中,在功能上,服务

  • 我想在JavaScript中解析没有时区的日期。我试过:

  • 我使用的是<code>java.sql。Date将日期字段存储在我的一个域对象中。此字段映射到MySQL<code>DATE</code>列。当我试图通过Jackson将该字段序列化为JSON时,Jackson似乎没有考虑夏时制。 下面是我的域对象中的字段: 如您所见,杰克逊已被指示将时区解释为EST。我的MySQL数据库也使用EST时区: 我的问题是,对于夏令时开始和结束之间的日期,Jackso

  • 问题内容: 我想知道用Java最简单的方法来获取将来的夏令时将改变的日期列表。 一种相当灵活的方法是简单地迭代一整年的时间,然后对它们进行TimeZone.inDaylightTime()测试。这将起作用,并且我不担心效率,因为这仅在我的应用每次启动时都需要运行,但是我想知道是否有更简单的方法。 如果您想知道为什么要这样做,那是因为我有一个javascript应用程序,该应用程序需要处理包含UTC

  • 问题内容: 当日期中包含EDT / EST时,我们是否有任何API可以验证日期是否有效。我已经尝试过用Java Java SimpleDateFormat进行Joda,但是我无法解析日期。 下面是我正在获取“ 2017/09/25 16:18:15.099 -0400 EDT”的示例格式。 任何帮助表示赞赏。 谢谢,sk 问题答案: 您是否尝试阅读文档? 从以下文档中: 区域名称 :这将输出时区I