2016-11-15 57 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()