2013-09-21 66 views
25

我在顯示日期時遇到問題,我得到的時間戳記爲1379487711,但按照此實際時間爲2013年9月18日12:31:51但它顯示的時間爲17-41-1970。如何以當前時間顯示。在Android中將時間戳轉換爲當前日期

用於顯示時間我用下面的方法:

private String getDate(long milliSeconds) { 
    // Create a DateFormatter object for displaying date in specified 
    // format. 
    SimpleDateFormat formatter = new SimpleDateFormat("dd-mm-yyyy"); 
    // Create a calendar object that will convert the date and time value in 
    // milliseconds to date. 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis((int) milliSeconds); 
    return formatter.format(calendar.getTime()); 
} 
+0

你確定這是在毫秒,而不是簡單的秒?使用此來檢查你的時間:http://www.onlineconversion.com/unix_time.htm – Sean

+0

當我檢查的答案是星期三,2013年9月18日7時01分51秒UTC – jkk

+0

我使用timestamp =長時間System.currentMilliSeconds ; – jkk

回答

58
private String getDate(long time) { 
    Calendar cal = Calendar.getInstance(Locale.ENGLISH); 
    cal.setTimeInMillis(time); 
    String date = DateFormat.format("dd-MM-yyyy", cal).toString(); 
    return date; 
} 

請注意,我把時間長而不是INT setTimeInMillis,注意到我的日期格式有MM而不是毫米(毫米是分鐘,而不是幾個月,這就是爲什麼你的「41」的值在幾個月應該是)

+1

但是DateFormat.format(「dd-MM-yyyy」,cal).toString();顯示錯誤,仍然顯示1970年 – jkk

+0

它顯示了什麼錯誤? –

+3

DateFormat的導入是:import android.text.format.DateFormat; –

7

轉換時間戳爲當前日期:

private Date getDate(long time) {  
    Calendar cal = Calendar.getInstance(); 
     TimeZone tz = cal.getTimeZone();//get your local time zone. 
     SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm a"); 
     sdf.setTimeZone(tz);//set time zone. 
     String localTime = sdf.format(new Date(time) * 1000)); 
     Date date = new Date(); 
     try { 
      date = sdf.parse(localTime);//get local date 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return date; 
    } 
+0

非常好..我犯了一個愚蠢的錯誤..我忘了乘以.. 感謝您的幫助 – Noman

7

對於時間戳轉換爲當前時間

Calendar calendar = Calendar.getInstance(); 
TimeZone tz = TimeZone.getDefault(); 
calendar.add(Calendar.MILLISECOND, tz.getOffset(calendar.getTimeInMillis())); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); 
java.util.Date currenTimeZone=new java.util.Date((long)1379487711*1000); 
Toast.makeText(TimeStampChkActivity.this, sdf.format(currenTimeZone), Toast.LENGTH_SHORT).show(); 
+0

這一個爲我工作。 – MSaudi

0
DateFormat df = new SimpleDateFormat("HH:mm", Locale.US); 
    final String time_chat_s = df.format(time_stamp_value); 

的time_stamp_value變量類型

與您的代碼會看起來像這樣:

private String getDate(long time_stamp_server) { 

    SimpleDateFormat formatter = new SimpleDateFormat("dd-mm-yyyy"); 
    return formatter.format(time_stamp_server); 
} 

我將「毫秒」更改爲time_stamp_server。考慮將毫秒名稱更改爲「c」或更全局的東西。 「c」確實很好,因爲它與時間和計算相比,以毫秒爲單位的全球化方式。所以,你不一定需要一個日曆對象來轉換,它應該是那麼簡單。

0

如果你想顯示聊天消息看起來像什麼應用程序,然後使用下面的方法。您需要根據您的要求更改日期格式。

public String DateFunction(long timestamp, boolean isToday) 
{ 
    String sDate=""; 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); 
    Calendar c = Calendar.getInstance(); 
    Date netDate = null; 
    try { 
     netDate = (new Date(timestamp)); 
     sdf.format(netDate); 
     sDate = sdf.format(netDate); 
     String currentDateTimeString = sdf.format(c.getTime()); 
     c.add(Calendar.DATE, -1); 
     String yesterdayDateTimeString = sdf.format(c.getTime()); 
     if(currentDateTimeString.equals(sDate) && isToday) { 
      sDate = "Today"; 
     } else if(yesterdayDateTimeString.equals(sDate) && isToday) { 
      sDate = "Yesterday"; 
     } 
    } catch (Exception e) { 
     System.err.println("There's an error in the Date!"); 
    } 
    return sDate; 
} 
+1

僅供參考,這些令人討厭的舊類現在已經成爲遺留問題,取而代之的是java.time類。對於Android,請參閱ThreeTen-Backport和ThreeTenABP項目。 –

0

TL;博士

你有一些整秒因爲1970-01-01T00:00:00Z而不是毫秒

Instant.ofEpochSecond(1_379_487_711L) 
     .toString() 

2013-09-18T07:01:51Z

整秒與毫秒

如上所述,你弄得計數的秒以計數OF-毫秒。

使用java.time

其他答案可能是正確的,但已過時。那裏使用的麻煩的舊日期時間類現在是遺留的,被java.time類取代。對於Android,請參閱下面的最後一個項目符號。

Instant類表示UTCnanoseconds(最多9個(9)小數的位數)的分辨率在時間軸上的力矩。

Instant instant = Instant.ofEpochSecond(1_379_487_711L) ; 

instant.toString():2013-09-18T07:01:51Z

應用,通過它您要查看這一刻的時區。

ZoneId z = ZoneId.of("America/Montreal") ; 
ZonedDateTime zdt = instant.atZone(z) ; 

zdt.toString():2013-09-18T03:01:51-04:00 [美國/蒙特利爾]

見本code run live at IdeOne.com


關於java.time

java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore

相關問題