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

将整数YYYYMMDD转换为具有本地时区的java.util.Date的好方法

常朗
2023-03-14
问题内容

我知道这个问题看起来像是FAQ主题,但关键是时区和性能。我有整数YYYYMMDD日期(例如20150131)。这是一个很好的“几乎可以工作”的解决方案:

import org.joda.time.DateTime;
import java.util.Date;

// ...

public Date extract(final int intDate) {
    Date result = null;

    try {
        result = new DateTime(
                intDate / 10000,
                (intDate / 100) % 100,
                intDate % 100,
                0,
                0,
                0,
                0).toDate();

    } catch (final IllegalArgumentException e) {
        // Log failure
    }
    return result;
}

“几乎”是因为我收到0x0126810d和EET(UTC + 2 / DST时为+3)时区,我收到:

java.lang.IllegalArgumentException:由于时区偏移转换而导致的非法瞬间:1930-06-20T22:00:00.000

至少使用JODA 1.6。我不能轻易切换。但我希望成为这样,1930-06-21T00:00:00.000+02:00并且我不在乎UTC的表示形式。

  1. 是否有可能(可以java.util.date存储这样的日期)?
  2. 好的,有没有更好的高性能方法可以实现这一目标(JODA只是这里的补救措施,并不重要)?

是的,我知道这一次不存在:

roman@node4:$ zdump -v Europe/Kiev | grep 1930
Europe/Kiev  Fri Jun 20 21:59:59 1930 UTC = Fri Jun 20 23:59:59 1930 EET isdst=0 gmtoff=7200
Europe/Kiev  Fri Jun 20 22:00:00 1930 UTC = Sat Jun 21 01:00:00 1930 MSK isdst=0 gmtoff=10800

问题答案:

好的,最后得到了以下片段,它的工作与我的期望最接近。像SDF一样,但是速度快了很多倍-就像没有字符串解析只是为了获取数字一样:

import org.joda.time.DateTime;
import org.joda.time.LocalDate;

public static Date toDateJoda(int intDate) {
    LocalDate ldt = new LocalDate(
        intDate / 10000,
        (intDate / 100) % 100,
        intDate % 100);

    DateTime dt = ldt.toDateTimeAtStartOfDay();
    return dt.toDate();
}

解析所有内容,并为我的案例获取下一个有效日期/时间。



 类似资料:
  • 每次需要整数数组时,我都会使用以下代码: 我使用BufferedReader而不是Scanner来降低输入过程中的时间复杂度。然而,当数组大小相对较大时,我想知道这种方法是否比Scanner有效(

  • 问题内容: Python和Matlab经常具有如下所示的整数日期表示形式: 733828.0 733829.0 733832.0 733833.0 733834.0 733835.0 733836.0 733839.0 733840.0 733841.0 这些数字对应于今年的某些日期。你们知道哪个功能可以将它们转换回YYYYMMDD格式吗? 太感谢了! 问题答案: 该课程可以为您提供帮助。如果将这

  • 我已经用FileBeat设置了ELK&我将日志转发到弹性搜索,重写@timestamp字段到日志文件中的时间。下面是它的logstash.conf文件 在上面,我尝试使用以下方法将时间戳的时区设置为IST 但我发现了错误 这是为了避免kibana将时间戳转换为我的本地时区,因为时间戳已经在本地时区IST中。 有人能告诉我如何为时间戳设置IST时区或者设置kibana不将时间戳转换为我的本地时区吗?

  • 问题内容: 我将日期以这种格式存储在SQLite数据库中: 当我以这种格式检索日期时,除小时外,其他一切都很好。时间总是如此。这是我的输出: 这是代码: 我究竟做错了什么? 问题答案: 我认为您的日期格式没有意义。没有13:00 PM。删除格式末尾的“ aaa”,或将HH转换为hh。 不过,这对我来说很好: 它将打印“ 2010年4月29日星期四CEST”。

  • 问题内容: 将对象转换为新的JDK 8 / JSR-310 的最佳方法是什么? 问题答案: 说明 尽管有名称,它代表时间轴上的一个瞬间,而不是“日期”。存储在对象中的实际数据是自1970-01-01T00:00Z(1970 GMT / UTC开始的午夜)以来的毫秒数。 中的等效类是,因此有一种方便的方法可以提供转换: 一个实例没有时区的概念。如果调用,这可能看起来很奇怪,因为相对于时区。但是,该方

  • 问题内容: 我想将对象转换为 Java。 格式为 问题答案: 转换日期为字符串使用方法: