在Android中将时间戳转换为当前date

我有一个显示date的问题,我得到的时间戳为1379487711,但根据这个实际时间是9/18/2013 12:31:51 PM,但它显示的时间为17-41-1970。 如何显示当前时间。

为了显示时间,我使用了下面的方法:

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

Solutions Collecting From Web of "在Android中将时间戳转换为当前date"

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

注意,我把时间放在setTimeInMillis中,而不是int,注意我的date格式有MM,而不是mm( mm是分钟 ,而不是几个月,这就是为什么你的月份应该是“41” )

将时间戳转换为当前date:

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

将时间戳转换为当前时间

 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(); 
  DateFormat df = new SimpleDateFormat("HH:mm", Locale.US); final String time_chat_s = df.format(time_stamp_value); 

time_stamp_valuevariablestypes很

用你的代码看起来像这样:

 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”是非常好的,因为它与时间和计算相比,以毫秒为单位的全球化方式。 所以,你不一定需要一个日历对象来转换,它应该是那么简单。

如果你想显示聊天消息看起来像什么了应用程序,然后使用下面的方法。 date格式你想要根据你的要求改变。

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

TL;博士

1970-01-01T00:00:00Z开始,你有几秒钟的时间,而不是毫秒

 Instant.ofEpochSecond( 1_379_487_711L ) .toString() 

2013-09-18T07:01:51Z

整秒对毫秒

如上所述,你用毫秒数来计算秒数。

使用java.time

其他答案可能是正确的,但已经过时了。 那里使用的麻烦的旧date时间类现在是遗留的,被java.time类取代。 对于Android,请参阅下面的最后一个项目符号。

Instant类表示UTC时间轴上的一个时刻,分辨率为纳秒 (最多九(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 [美国/蒙特利尔]

看到这个代码在IdeOne.com上运行 。


关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的遗留date时间类,如java.util.DateCalendarSimpleDateFormat

Joda-Time项目现在处于维护模式 ,build议迁移到java.time类。

要了解更多信息,请参阅Oracle教程 。 并search堆栈溢出了很多例子和解释。 规范是JSR 310 。

从何处获取java.time类?

  • Java SE 8Java SE 9和更高版本
    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小function和修复。
  • Java SE 6Java SE 7
    • 大部分的java.timefunction都被移植到了ThreeTen-Backport中的 Java 6&7中。
  • Android的
    • ThreeTenABP项目专门针对Android,采用了ThreeTen-Backport (上文提到)。
    • 请参阅如何使用ThreeTenABP …。

ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里find一些有用的类,比如IntervalYearWeekYearQuarter 等等 。