59

我在显示日期时遇到问题,我得到的时间戳为 1379487711,但据此实际时间是 2013 年 9 月 18 日下午 12:31:51,但它显示时间为 1970 年 17 月 41 日。如何将其显示为当前时间。

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

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

10 回答 10

116
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”,而月份应该是)

对于 Kotlin 用户:

fun getDate(timestamp: Long) :String {
   val calendar = Calendar.getInstance(Locale.ENGLISH)
   calendar.timeInMillis = timestamp * 1000L
   val date = DateFormat.format("dd-MM-yyyy",calendar).toString()
   return date
}

不被删除的评论: 亲爱的试图编辑这篇文章的人- 我相信完全改变答案的内容是违反本网站的行为规则的。今后请不要这样做。-莉娜布鲁

于 2013-09-21T07:24:33.797 回答
14

用于将时间戳转换为当前时间

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();
于 2014-05-21T07:30:50.030 回答
10

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

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;
    }
于 2013-09-21T07:45:25.250 回答
5
  DateFormat df = new SimpleDateFormat("HH:mm", Locale.US);
  final String time_chat_s = df.format(time_stamp_value);

time_stamp_value 变量类型为long

使用您的代码,它看起来像这样:

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

于 2017-03-16T10:14:59.753 回答
4

如果您的结果总是返回 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

它很容易使用。

于 2018-03-21T07:24:34.567 回答
3
于 2017-09-26T01:01:55.323 回答
2

我从这里得到这个: 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 无法识别 - “无法解析方法”。

于 2019-06-25T23:55:53.267 回答
1

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

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;
}
于 2017-09-25T12:57:37.140 回答
1

当前日期和时间:

 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();
于 2020-09-07T04:55:06.373 回答
0

使用新的--> JAVA.TIME 用于 Android 应用程序定位 >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;

    }   

插入的日期时间戳将采用适合显示的本地日期时间格式 [2020-07-08T16:29:18.647]

希望能帮助到你!

于 2020-07-07T11:40:11.350 回答