java-在Android中将时间戳转换为当前日期
我在显示日期时遇到问题,我将时间戳设置为1379487711,但据此实际时间为2013年9月18日下午12:31:51,但显示的时间为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());
}
8个解决方案
81 votes
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”的原因 )
Lena Bru answered 2020-07-24T11:46:04Z
10 votes
用于将时间戳转换为当前时间
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();
Kaushik answered 2020-07-24T11:46:24Z
7 votes
将时间戳转换为当前日期:
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;
}
kyogs answered 2020-07-24T11:46:44Z
3 votes
如果结果始终返回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
使用起来非常简单。
Paras Andani answered 2020-07-24T11:47:13Z
2 votes
tl;博士
自YearQuarter起,您有几秒而不是毫秒。
Instant
.ofEpochSecond( 1_379_487_711L )
.atZone(
ZoneId.of( "Africa/Tunis" )
)
.toLocalDate()
.format(
DateTimeFormatter.ofPattern( "dd-MM-uuuu" )
)
2013-09-18T07:01:51Z
整秒与毫秒
如上所述,您将秒数与毫秒数混淆了。
使用java.time
其他答案可能是正确的,但已过时。 现在,在那里使用的麻烦的旧日期时间类已成为旧版,由java.time类取代。 对于Android,请参见下面的最后一个项目符号。
YearQuarter类表示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 [美国/蒙特利尔]
生成一个以所需格式表示此值的字符串。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
String output = zdt.format( f ) ;
18-09-2013
看到此代码在IdeOne.com上实时运行。
关于java.time
java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的传统日期时间类,例如YearQuarter、YearQuarter和YearQuarter。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。 并在Stack Overflow中搜索许多示例和说明。 规格为JSR 310。
在哪里获取java.time类?
Java SE 8,Java SE 9和更高版本内置的
标准Java API的一部分,具有捆绑的实现。
Java 9添加了一些次要功能和修复。
Java SE 6和Java SE 7很多java.time功能都在ThreeTen-Backport中反向移植到Java 6和7。
安卓系统ThreeTenABP项目专门针对Android改编了ThreeTen-Backport(如上所述)。
请参阅如何使用ThreeTenABP…。
ThreeTen-Extra项目使用其他类扩展了java.time。 该项目为将来可能在java.time中添加内容提供了一个试验场。 您可能会在这里找到一些有用的类,例如YearQuarter、YearQuarter、YearQuarter等。
Basil Bourque answered 2020-07-24T11:49:37Z
0 votes
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”真的很好,因为它与时间和与计算的关系远比毫秒多得多。 因此,您不一定需要转换日历对象,它应该就这么简单。
sivi answered 2020-07-24T11:50:06Z
0 votes
如果要显示聊天消息看起来像什么应用程序,请使用以下方法。 您要根据需要更改日期格式。
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;
}
Vinod Makode answered 2020-07-24T11:50:26Z
0 votes
我是从这里得到的:[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);
顺便说一句:Android无法识别("dd-MM-yyyy", cal)-“无法解析方法”。
ekashking answered 2020-07-24T11:50:55Z