2013-09-21 65 views
25

Tôi gặp sự cố khi hiển thị ngày, tôi nhận được dấu thời gian là 1379487711 nhưng theo thời gian thực tế là 9/18/2013 12:31:51 CH nhưng nó hiển thị thời gian 17-41-1970. Làm thế nào để hiển thị nó như thời gian hiện tại.chuyển đổi dấu thời gian thành ngày hiện tại trong android

để hiển thị thời gian tôi đã sử dụng các phương pháp sau đây:

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

Bạn có chắc chắn điều này chỉ mất vài giây và không phải giây đơn giản? sử dụng điều này để kiểm tra thời gian của bạn: http://www.onlineconversion.com/unix_time.htm – Sean

+0

Khi tôi kiểm tra câu trả lời là Thứ Tư, 18 tháng 9 năm 2013 07:01:51 UTC – jkk

+0

Tôi đang sử dụng dấu thời gian như thời gian dài = System.currentMilliSeconds ; – jkk

Trả lời

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

thông báo rằng tôi đặt thời gian trong setTimeInMillis miễn và không phải là int, thông báo định dạng ngày của tôi có MM và không mm (mm là phút, và không tháng, đây là lý do tại sao bạn có một giá trị của "41", nơi những tháng nên có)

+1

Nhưng DateFormat.format ("dd-MM-yyyy", cal) .toString(); hiển thị lỗi và năm vẫn hiển thị 1970 – jkk

+0

lỗi nào hiển thị? –

+3

việc nhập cho DateFormat là: nhập android.text.format.DateFormat; –

7

chuyển đổi dấu thời gian vào ngày hiện tại:

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

Rất tốt .. tôi đã mắc phải một sai lầm ngu ngốc .. tôi quên nhân lên. Cảm ơn sự giúp đỡ – Noman

7

Để chuyển đổi tem thời gian hiện tại

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

Điều này giúp ích cho tôi. – MSaudi

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

Các loại biến time_stamp_value là dài

Với mã của bạn nó sẽ trông giống như sau:

private String getDate(long time_stamp_server) { 

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

Tôi thay đổi "mili giây" thành time_stamp_server. Xem xét thay đổi tên của mili giây thành "c" hoặc thành cái gì đó toàn cầu hơn. "c" thực sự tốt vì nó liên quan đến thời gian và tính toán theo cách toàn cầu nhiều hơn mili giây. Vì vậy, bạn không nhất thiết cần một đối tượng lịch để chuyển đổi và nó phải đơn giản như vậy.

0

Nếu bạn muốn hiển thị tin nhắn trò chuyện trông giống như ứng dụng nào, sau đó sử dụng phương thức bên dưới. định dạng ngày bạn muốn thay đổi theo yêu cầu của bạn.

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

FYI, những lớp học cũ phiền hà này hiện là di sản, được thay thế bởi các lớp java.time. Đối với Android, hãy xem dự án ThreeTen-Backport và ThreeTenABP. –

0

tl; dr

Bạn có một số toàn giây từ 1970-01-01T00:00:00Z hơn mili giây.

Instant.ofEpochSecond(1_379_487_711L) 
     .toString() 

2013-09-18T07: 01: 51Z

Tổng giây so với mili giây

Như đã trình bày ở trên, bạn nhầm lẫn một số-of-giây với một số-of- mili giây.

Sử dụng java.time

Các câu trả lời khác có thể đúng nhưng đã lỗi thời. Các lớp thời gian ngày rắc rối cũ được sử dụng hiện nay được thừa kế, được thay thế bởi các lớp java.time. Đối với Android, hãy xem những viên đạn cuối cùng bên dưới.

Lớp Instant đại diện cho một thời điểm trên dòng thời gian ở UTC với độ phân giải nanoseconds (tối đa chín (9) chữ số thập phân).

Instant instant = Instant.ofEpochSecond(1_379_487_711L) ; 

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

Áp dụng múi giờ mà qua đó bạn muốn xem thời điểm này.

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

zdt.toString(): 2013-09-18T03: 01: 51-04: 00 [America/Montreal]

Xem code run live at IdeOne.com này.


Về java.time

Khung java.time được xây dựng vào Java 8 và sau đó. Các lớp này thay thế các lớp học ngày giờ legacy phiền hà cũ như java.util.Date, Calendar, & SimpleDateFormat.

Dự án Joda-Time, hiện đang ở maintenance mode, khuyên di chuyển đến các lớp java.time.

Để tìm hiểu thêm, hãy xem Oracle Tutorial. Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310.

Nơi lấy các lớp java.time?

Dự án mở rộng ThreeTen-Extra java.time với các lớp bổ sung.Dự án này là một nền tảng chứng minh cho những bổ sung có thể có trong tương lai vào java.time. Bạn có thể tìm thấy một số lớp học hữu ích tại đây như Interval, YearWeek, YearQuartermore.