当前位置: 首页 > 知识库问答 >
问题:

将UTC转换为est的JUnit测试用例

吕宣
2023-03-14

我尝试编写一个类来从UTC转换为EST时区。此外,我只想存储日期部分。它工作正常。现在我正在寻找dateFromUtcToJavaTimeZone方法的各种JUnit测试用例。你能给我一些建议吗?

package com.ssc.dmh.util.general;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class DateUtil {

    public static Date dateFromUtcToJavaTimeZone(Date date) {
        if (date == null) {
            return null;
        }
        String utcDateString = utcDateString(date);
        return com.ssc.dmh.util.DateUtil.stringToDate(utcDateString, "yyyy-MM-dd");
    }

    private static String utcDateString(Date date) {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
        return dateFormat.format(date);
    }
}

共有1个答案

诸葛皓
2023-03-14

断言:

myJavaUtilDate                       // An object of type `java.util.Date`, a terrible legacy class that is no longer used.
.toInstant()                         // Convert from legacy class `java.util.Date` to modern `java.time.Instant`. Both classes represent a moment in UTC.
.atZone(                             // Adjust from UTC to a time zone.
    ZoneId.of( "America/New_York" )  // Real time zone names are in format `Continent/Region`, never 2-4 letter pseudo-zones such as `EST`, `CST`, or `IST`. 
)                                    // Returns a `ZonedDateTime` object. Same moment, different wall-clock time.
.toLocalDate()                       // Extract the date only.
.toString()                          // Generate text representing that date, in standard ISO 8601 format.
.equals(
    "2020-01-23" 
)

您正在使用糟糕的类,这些类在几年前被采用JSR 310的现代java.time类所取代。

对于没有时间和时区的纯日期值,请使用< code>java.time.LocalDate。

您的输入字符串符合 ISO 8601 标准。java.time 类在解析/生成字符串时默认使用标准格式。因此,不需要格式化模式

LocalDate ld = LocalDate.parse( "2020-01-23" ) ; 

如果给定<code>java.util。日期由尚未更新为java的旧代码生成。时间,转换。调用添加到旧类的新转换方法。

Instant instant = myJavaUtilDate.toInstant() ;

即时Date都表示UTC的时刻。也就是说,两者的偏移量都为零小时分秒。

在任何特定时刻,日期在全球各地因地区而异。在日本是“明天”,而在墨西哥还是“昨天”。因此,您必须指定查看日期的时区。

ZoneId z = ZoneId.of( "America/New_York" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

提取仅日期值。

LocalDate ld = zdt.toLocalDate() ;

生成文本,并在断言中进行比较。

String output = ld.toString() ;  // Genetate text in standard ISO 8601 format. 
 类似资料:
  • 我需要转换一个日期列,数据库中的日期正好偏离了5个小时。时间保持为UTC,当他们查看应用程序时,它会显示EST时区。应用程序自动转换时间。UTC比东部标准时间提前了5秒。以下代码似乎为大多数时间戳固定了时间和日期,但是,有没有办法设置和偏移?报告回顾一天,并应将转换后的UTC时间返回到EST时间。

  • 如何在Ruby中将格式为< code > ' 2009-02-02 00:00:00 ' 的UTC时间戳转换为EST/EDT?注意,我没有使用Rails,而是一个简单的Ruby脚本。 1如果日期范围介于 EST(通常是 1 月至 3 月中旬)之间,则需要 UTC-5 小时。对于EDT,它是UTC-4小时。 到目前为止,我有以下功能将UTC转换为EST/EDT。 上面的代码做了我想要的,但是我的解决

  • 我是PostgreSQL的新手,我想知道是否有一种直接的方法可以使用函数将表中的时间戳值转换为不同的时区。在我的情况下,是UTC到EST。 例如,我需要将这些值转换为EST(不仅仅是一个值,而是表中的所有值)

  • 问题内容: 我需要有关此java方法的一些建议。此方法的目的是采用表示日期的字符串-该字符串是从EST时区中的日期创建的-并将其转换为UTC时区中的java Date对象。 我看到的问题是dt的值似乎已关闭。例如,如果dateString为‘10 / 16/2012 12:06 PM’-我期望dt(以UTC为单位)的值类似于“ 2012年10月16日,星期二,下午4:06”。取而代之的是,dt的值

  • 我在一个应用程序API (DFC)下工作,它给了我一个类似日期的对象(IDfTime)。API自动将日期转换为当地时区(EST)。我需要转换为UTC发送到oracle数据库。出于某种原因,我的代码增加了一个月。我不明白。有人能解释一下这个吗? 是由应用 API 返回的类似日期的对象。我已将其转换为字符串,它看起来像预期的那样(对我来说是 EST)。因此,使用日历和简单日期格式将其转换为特定格式的字

  • 我有一个以 UTC 时区存储交易日期时间的表。我需要将此时间转换为东部时区,即美国东部时间或美国东部夏令时,具体取决于交易日期。 如何在不编写大函数或创建为每个交易日期标记 EST / EDT 的表/视图的情况下执行此操作?