有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java日期作为“日期键”的Int

我想知道如何在Java中创建一个表达式,该表达式接受格式为“1999-12-30 12:34:45”的日期变量,并将其转换为包含“19991230”的Int

这可能是其他人会喜欢的,尤其是那些提取和清理数据以加载到数据仓库中的人

我的猜测是需要更改日期模式、转换为字符串、截断第一部分(8个字符)并转换为int

想法

(更新) 我不善于解释这个问题。 结果int将作为日期维度的键/Fk id。应该执行类似的操作来创建时间维度的键。int将减少facts表中消耗的大小,这些int键将存储在facts表中。见相关答案:https://stackoverflow.com/a/8416548/1132571


共 (6) 个答案

  1. # 1 楼答案

    您可以使用以下内容:

    var dateObj=new Date("1999-12-30 12:34:45");
    

    然后,您需要做的就是获取date对象的值,如下所示:

    var timeStamp=dateObj.valueOf();
    

    这将给你自1970年以来的毫秒,这是一个被大多数计算机系统使用的通用时间系统

    要转换回使用,请执行以下操作:

    var newTime=new Date(timeStamp);
    
  2. # 2 楼答案

    假设格式保持不变:

    String dateStr = "1999-12-30 12:34:45";
    dateStr = dateStr.substring(0, 10);
    dateStr = dateStr.replace("-", "");
    int n = Integer.parseInt(dateStr);
    System.out.println(n);
    

    印刷品:19991230

  3. # 4 楼答案

    只需删除特殊字符,然后转换为int

    Integer.parseInt("1999-12-30 12:34:45".replaceAll("[- :]", ""));

    在您的情况下,您只需要日期,而不是时间,因此:

    Integer.parseInt("1999-12-30 12:34:45".substring(0,10).replaceAll("-", ""));

    我应该提到,只有在原始格式正确的情况下,这才有效。。。事实上,它很难看,我宁愿用很长的一段时间——也许是简单的格式。你真的不想扔掉有用的数据

  4. # 5 楼答案

    使用SimpleDateFormat类很容易做到这一点。但是,正如其他人提到的,您可能应该将历元时间戳存储为数据库时间戳列,而不是以int形式存储日期。当您稍后使用SQL操作数据时,它将导致问题

    public static void main(String[] args) throws ParseException {
            String dateStr = "1999-12-30 12:34:45";
            String formatStr = "yyyy-MM-dd HH:mm:ss";
            String formatStrOther = "yyyyMMdd";
            Date testDate = null;
            SimpleDateFormat sdf= new SimpleDateFormat(formatStr);
            SimpleDateFormat sdfOther= new SimpleDateFormat(formatStrOther);
            sdf.setLenient(false);
            testDate = sdf.parse(dateStr);
            Integer otherDate = Integer.valueOf(sdfOther.format(testDate));
            System.out.println("Newly formatted date in int is: " + otherDate); //prints Newly formatted date in int is: 19991230
    
        }
    
  5. # 6 楼答案

    虽然我同意评论者的看法,但这很奇怪,如果我真的需要将日期转换为long,我会使用date.getTime(),它返回一个long,表示1970年1月1日以来的毫秒数

    好东西是它可以很容易地转换回日期(Java有一个用于此的构造函数,我怀疑其他语言也有)