在android中将时间戳转换为当前日期

时间:2013-09-21 07:07:08

标签: java android date timestamp

我在显示日期方面遇到问题,我的时间戳为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());
} 

10 个答案:

答案 0 :(得分:74)

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

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

答案 1 :(得分:8)

将时间戳转换为当前日期:

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

答案 2 :(得分:8)

将时间戳转换为当前时间

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

答案 3 :(得分:3)

如果您的结果始终返回1970,请尝试以下方式:

Calendar cal = Calendar.getInstance(Locale.ENGLISH);
cal.setTimeInMillis(timestamp * 1000L);
String date = DateFormat.format("dd-MM-yyyy hh:mm:ss", cal).toString();

您需要将您的TS值乘以1000

使用起来非常简单。

答案 4 :(得分: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"非常好,因为它与时间和计算有关,而且比毫秒更全局。因此,您不一定需要转换日历对​​象,它应该就这么简单。

答案 5 :(得分:0)

如果您希望显示聊天消息看起来像应用程序,请使用以下方法。您希望根据您的要求更改日期格式。

inputElement.dispatchEvent(new KeyboardEvent("keyup", {key: "Enter", bubbles: true});

答案 6 :(得分:0)

TL;博士

1970-01-01T00:00:00Z以来,您有整秒,而不是毫秒

Instant.ofEpochSecond( 1_379_487_711L )
       .toString()
  

2013-09-18T07:01:51Z

整秒与毫秒

如上所述,您将秒数与毫秒计数混淆。

使用java.time

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

Instant类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(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.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 7 :(得分:0)

我从这里得到的:http://www.java2s.com/Code/Android/Date-Type/CreateDatefromtimestamp.htm

以上所有答案对我都没有作用。

Calendar c = Calendar.getInstance();
c.setTimeInMillis(Integer.parseInt(tripBookedTime) * 1000L);
Date d = c.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy");
return sdf.format(d);

顺便说一句:("dd-MM-yyyy", cal)无法被Android识别-“无法解析方法”。

答案 8 :(得分:0)

使用新功能->面向Java API的JAVA.TIME> API26

保存日期时间戳

 @RequiresApi(api = Build.VERSION_CODES.O)
    public long insertdata(String ITEM, String INFORMATION, Context cons)
    {
        long result=0; 

            // Create a new map of values, where column names are the keys
            ContentValues values = new ContentValues();
            
            LocalDateTime INTIMESTAMP  = LocalDateTime.now();
            
            values.put("ITEMCODE", ITEM);
            values.put("INFO", INFORMATION);
            values.put("DATETIMESTAMP", String.valueOf(INTIMESTAMP));
        
            try{

                result=db.insertOrThrow(Tablename,null, values);            

            } catch (Exception ex) {
            
                Log.d("Insert Exception", ex.getMessage());
                
            }

            return  result;

    }   

插入的日期时间戳将位于本地DATETIMEFORMAT 中,适合显示。[2020-07-08T16:29:18.647]。

希望有帮助!

答案 9 :(得分:0)

当前日期和时间:

 private String getDateTime() {
        Calendar calendar = Calendar.getInstance(Locale.ENGLISH);
        Long time = System.currentTimeMillis();
        calendar.setTimeInMillis(time);

       //dd=day, MM=month, yyyy=year, hh=hour, mm=minute, ss=second.

        String date = DateFormat.format("dd-MM-yyyy hh:mm:ss",calendar).toString();
        return date;
    }

注意:如果结果始终返回1970,请尝试以下方法:

Calendar calendar = Calendar.getInstance(Locale.ENGLISH);
calender.setTimeInMillis(time * 1000L);
String date = DateFormat.format("dd-MM-yyyy hh:mm:ss", calendar).toString();