我正在尝试创建格式为“mm/dd/yyyy hh:mm a”的时间戳。我的应用程序最初崩溃了,但我尝试了不同的方法,它不再崩溃,但在聊天屏幕上显示“java.text.SimpleDateFormat@4f47c0fb“而不是时间戳。
以下是聊天屏幕时间戳的屏幕截图
这是来自我的适配器聊天.java文件
@Override
public void onBindViewHolder(@NonNull MyHolder myHolder, int i) {
//Get data
String message = chatList.get(i).getMessage();
String timeStamp = chatList.get(i).getTimestamp();
//Convert time stamp to mm/dd/yyyy hh:mm am/pm
//Calendar cal = Calendar.getInstance(Locale.ENGLISH);
//cal.setTimeInMillis(Long.parseLong(timeStamp));
String dateTime = new SimpleDateFormat("MM/dd/yyyy hh:mm a", Locale.getDefault()).toString();
//Set data
myHolder.messageTv.setText(message);
myHolder.timeTv.setText(dateTime);
try {
Picasso.get().load(imageUrl).into(myHolder.profileIv);
} catch (Exception e) {
}
//Set seen/delivered status of message
if (i == chatList.size() - 1) {
if (chatList.get(i).isSeen()) {
myHolder.isSeenTv.setText("Seen");
}
else {
myHolder.isSeenTv.setText("Delivered");
}
}
else {
myHolder.isSeenTv.setVisibility(View.GONE);
}
}
我注释掉了导致它崩溃的2行代码,并在它下面尝试了新方法。有人可以指导我朝着正确的方向前进吗?我不确定我做错了什么。任何帮助将不胜感激。谢谢!
您必须使用toLocalizedPattern()代替toString()
String dateTime = new SimpleDateFormat("mm/dd/yyyy hh:mm a", Locale.getDefault()).toString();
也就是说,你必须这样使用它。
String dateTime = new SimpleDateFormat("mm/dd/yyyy hh:mm a", Locale.getDefault()).toLocalizedPattern();
关于你的问题,不止一个不清楚的观点,但我正在尝试一个建议。对于我的方式,我需要两个格式化程序:
private static DateTimeFormatter timestampFormatter = new DateTimeFormatterBuilder()
.appendValue(ChronoField.INSTANT_SECONDS)
.appendValue(ChronoField.MILLI_OF_SECOND, 3)
.toFormatter();
private static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm a");
我知道chatList.get(i). getTimestamp()
可能会返回null
,但在这种情况下,您没有任何聊天消息要显示。我们需要考虑这种可能性。下面的代码将为您提供字符串NA
。如果您想要其他东西,请进行修改。接下来,从您的注释掉的代码(在null
上崩溃的代码)来看,它可能还会返回一个String
,其中包含自纪元以来的长毫秒数。所以我也在处理这种情况。
int i = 0;
String timeStamp = chatList.get(i).getTimestamp();
String dateTime;
if (timeStamp == null) {
dateTime = "NA";
} else {
Instant inst = timestampFormatter.parse(timeStamp, Instant.FROM);
dateTime = inst.atZone(ZoneId.systemDefault()).format(dtf);
}
System.out.println(dateTime);
在我的时区(欧洲/哥本哈根)中,当聊天列表(i).get(i)返回时间戳()
时的示例输出1567890123456
:
09/07/2019 11:02 下午
第一种情况,当时间戳
为空
并且您尝试长解析长(时间戳)时
,您将获得一个 java.lang.数字格式异常:空
。如果您的代码未捕获此异常,则会崩溃。
第二种情况,您正在调用SimpleDateFormat
的toString
方法。SimpleDateFormat
没有html" target="_blank">定义toString
方法本身,因此调用了Object.toStrng()
。这将返回一个字符串,如java.text.SimpleDateFormat@4f47c0fb
。类名和一个有趣的十六进制值由@
符号分隔。
但是,您可能根本不想使用SimpleDateFormat
。那个类是臭名昭著的麻烦制造者,而且早就过时了。相反,在我的代码中,我使用了DateTimeForware
和java.time的其他类,现代Java日期和时间API。
java.time在新旧Android设备上都运行良好。只不过要求至少Java 6。
Instant。上述代码中的FROM
,方法引用Instant::FROM
org.threeten导入日期和时间类。带有子包的bp
java.time
。将 java.time
向后移植到 Java 6 和 7(三十个用于 JSR-310)。问题内容: 在python中,日期似乎是一件棘手的事情,而从pandas TimeStamp中剥离日期却给我带来了很多麻烦。我想简单地 我有一个带有Created_date列的数据框: 我已尝试在该系列上应用该方法,例如:,但出现错误 有人可以帮我吗? 问题答案: 在元素上: 您可以通过调用组成的元素的方法来获取原始对象: 然而, 另一种 方式,你可以做到这一点是通过调用未绑定方法: 此方法最快,
如果我将视图更改为不强制转换,我不会得到错误,但结果是错误的。 有人知道我如何将这个日期格式化为这个特定的模式吗?我尝试使用TimeStamp、java.sql.date等,但没有任何效果...
本文向大家介绍js时间戳转yyyy-MM-dd HH-mm-ss工具类详解,包括了js时间戳转yyyy-MM-dd HH-mm-ss工具类详解的使用技巧和注意事项,需要的朋友参考一下 在web开发中,我们经常需要用js将时间戳转yyyy-MM-dd HH-mm-ss类似的格式,这样才适合我们的观感,那么我们该如何在js中将时间戳转换成这种格式呢?其实很简单,我们开发一个时间戳工具类,如下: 第一种
问题内容: 我希望将日期格式更改为MM / DD / YYYY,当前为YYYY / MM / DD。 我尝试进行研究,但具有讽刺意味的是,情况总是相反。现在有人可能会说将其向后尝试从那里开始尝试,但没有成功。 我上课的所有事情: 顺便说一下,我不熟悉的简单日期格式类和日期格式类,并且尝试实现它们均未成功。 问题答案: 只需使用即可转换为。无需麻烦的API。 而是在整个代码中使用此对象。每当您需要将
问题内容: 我正在尝试从Netezza将具有格式的记录插入Oracle,但是我得到的日期类型无效。 我该如何做到这一点? 问题答案: http://www.sqlfiddle.com/#!4/22115/1
我想存储和查看格式为yyyy-mm-dd HH: mmZ的时间戳列。我对cqlshrc文件中的dattimeform进行了更改,并将其存储在home下的. cassandra文件夹中。以下是我所做的更改: 所以在cql中我创建了一个简单的临时表,如下所示: 现在,当我做: 我得到错误: 无效请求:来自服务器的错误:代码=2200[无效查询]消息="无法将'1997-21-01 00:01Z'强制到