Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将历元日期转换为日期时间格式1980-01-01_Java_Android_Date Format_Epoch - Fatal编程技术网

Java 将历元日期转换为日期时间格式1980-01-01

Java 将历元日期转换为日期时间格式1980-01-01,java,android,date-format,epoch,Java,Android,Date Format,Epoch,这是我的密码 private Date getReferenceDate(int seg) { switch (seg) { case 1: case 2: case 3: return new Date(1980-01-01); case 31: case 32: case 33: return new Date(1970-01-01);

这是我的密码

private Date getReferenceDate(int seg) {

    switch (seg) {
        case 1:
        case 2:
        case 3:
            return new Date(1980-01-01);
        case 31:
        case 32:
        case 33:
            return new Date(1970-01-01);
        default:
            return new Date(1980-01-01);
    }
}

 private Date getDateFormat(int time, int seg) {
    Date date = getBaseReferenceDate(seg);
    date.setSeconds(date.getSeconds() + time);
    date.setHours(date.getHours() - 5);
    date.setMinutes(date.getMinutes() - 30);
    date.setSeconds(date.getSeconds()-1);
    return date;
}
我有1185106460格式的日期 我想把它转换成2017-07-21 12:14:20这种格式
我得到了1980-01-01的错误输出

您可以通过以下方式将长日期转换为日期:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String date=dateFormat.format(new Date(long timeInMillis));

我想以下是你想要的

尽管您使用的是Android,因此没有内置现代Java日期和时间API,但我使用它是因为它更方便,特别是对于这种操作。你把它弄进去,看

这张照片是:

2007-07-22T12:14:20Z
Sun Jul 22 14:14:20 CEST 2007
这是您要求的日期和时间

如果只需要YY-mm-dd格式的日期:

    System.out.println(getDateFormat(1185106460, 1)
            .format(DateTimeFormatter.ISO_LOCAL_DATE));
这张照片

2007-07-22
如果您需要过时的
日期
对象,例如对于某些无法更改的旧API:

    System.out.println(DateTimeUtils.toDate(getDateFormat(1185106460, 1).toInstant()));
在我的电脑上,这个打印:

2007-07-22T12:14:20Z
Sun Jul 22 14:14:20 CEST 2007
这是相同的时间点,只是
Date.toString()
将其格式化为JVM的时区设置。在Java8或更高版本中,转换将是

    System.out.println(Date.from(getDateFormat(1185106460, 1).toInstant()));
你做错了什么?首先,你使用了
Date
中不推荐的方法。它们之所以被弃用是因为它们跨时区不可靠,所以您不想使用它们。您可能还打算使用一个已弃用的
Date
构造函数,但您使用的是未弃用的构造函数
1980-01-01
是一个带有两个减法的算术表达式
01
是一个值为1的八进制整数文本,因此表达式的结果为1978。您将1978传递给构造函数
日期(长日期)
,在这里它们被解释为自1970-01-01T00:00:00Z的历元起的毫秒

在您打算将所提到的历元作为参考的情况下,您正在接近,只差1968毫秒。我怀疑你最后减去1秒是为了弥补这一点。如果您打算使用1980年的参考,则需要10年,节省1978毫秒。这就引出了这个问题


在任何情况下,
Date
早已过时,不适合您正在尝试的操作。正如我所说,我推荐ThreeTenABP。如果你真的,真的不想依赖外部库(直到现代API出现在Android上),你可以查看
Calendar
和/或
GregorianCalendar
类,但它们很麻烦,容易出错,请注意。

这还不清楚,抱歉。你的意思是如果
seg
是1、2或3,那么你想在1980-01-01的基础上增加1185106460秒?然后对时区进行一些调整?如果seg是1,2,3,我希望日期格式1980-01-01 1185106460是通过date.setSeconds(date.getSeconds()+time)的时间;date.setHours(date.getHours()-5);date.setMinutes(date.getMinutes()-30);date.setSeconds(date.getSeconds()-1);这并没有让事情变得更清楚。此外,您所需的格式仅包括日期,但您所需的结果也包括一天中的时间。你真的想要哪一个?我想要日期…基本上我得到输出2007-7-22,是1970-01-01格式,但我想要输出2017-7-21,是1980-01-01格式谢谢先生,我能理解我的错误