2016-11-15 61 views
-1

以下给出: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); 
+7

因为它使用了EDT输入,但使用GMT输出。 –

+7

切勿在没有明确时区的情况下进行时间戳转换。 –

+1

这是一场亲密的比赛。 – Maroun

回答

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); 
    } 

} 
0

你肯定忘了考虑时区使用。如果你没有定义它,默认情况下(来自JVM)会被采用,并且可能会因服务器而异。

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 
1

你应该对输入和输出指定时区。您可以使用“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()