意外值将字符串日期转换为纪元时间?

时间:2016-11-15 14:57:12

标签: java

以下内容为:1475020875000。当我将此纪元转换回人类可读的时间戳时,我得到:Wed, 28 Sep 2016 00:01:15 GMT,这与初始日期不同?

String date = "2016-09-27 20:01:15.0";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long epoch = df.parse(date).getTime();

System.out.println(epoch);

4 个答案:

答案 0 :(得分:2)

您应该为输入和输出指定时区。在使用格式化方法之前,您可以使用“z”实例化SimpleDateFormat和setTimeZone:

package stackoverflow;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class Programa {

    public static void main(String[] args) throws ParseException {
        String date = "2016-09-27 20:01:15 GMT";
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
        long epoch = df.parse(date).getTime();

        System.out.println(epoch);

        Date d = new Date(epoch);
        df.setTimeZone(TimeZone.getTimeZone("GMT"));
        String out = df.format(d);
        System.out.println(out);
    }

}

对于可用的时区,请尝试TimeZone.getAvailableIDs()

答案 1 :(得分:1)

在这里工作得很好:

package stackoverflow;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Programa {

    public static void main(String[] args) throws ParseException {
        String date = "2016-09-27 20:01:15.0";
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long epoch = df.parse(date).getTime();

        System.out.println(epoch);

        Date d = new Date(epoch);
        String out = df.format(d);
        System.out.println(out);
    }

}

答案 2 :(得分:0)

你当然忘了考虑使用时区。如果您没有定义它,则会采用默认值(来自JVM),例如,根据您的服务器而不同。

答案 3 :(得分:0)

尝试LocalDateTime

    String date = "2016-09-27 20:01:15";
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    long epoch = df.parse(date).getTime();
    System.out.println(epoch);
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
    LocalDateTime ld = LocalDateTime.parse(date, formatter);
    long epoch2 = ld.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
    System.out.println(epoch2);
    Instant in = Instant.ofEpochMilli(epoch2);
    LocalDateTime ldt = LocalDateTime.ofInstant(in, ZoneId.systemDefault());
    System.out.println(ldt);

输出

1474986675000
1474986675000
2016-09-27T20:01:15