【发布时间】:2018-08-16 10:20:29
【问题描述】:
我最近开始使用 Android Studio 3.1.2 和 SDK 19 编写我真正的第一个 Android 项目。
我的一个对象具有日期属性。在某些时候,我想在 TextView 中显示整个日期时间或部分时间。所以我尝试了菜鸟的方式,并在我的日期上调用了 toString()。 但是,显示的文本包含我在用于创建日期对象的 SingleDateFormat 模式中未定义的元素。
这就是我在 myObject 上创建日期的方式:
Date date1;
Date date2;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date1 = format.parse(json.getString("date_1"));
dtae2 = format.parse(json.getString("date_2"));
} catch(ParseException e) {
//error handling stuff
e.printStackTrace();
}
这是我想在视图上显示日期的地方:
myTextView.setText("First appearance logged at " + myObject.getDate1().toString());
我希望显示像 2018-08-16 12:14:42 这样的字符串。相反,我得到的是Thu Aug 12:14:42 GMT +02:00 2018。这似乎是另一个 DateFormat 并忽略了我的自定义模式。
所以我的问题是,如果有办法操纵 toString() 的输出,那么日期会以我在模式中定义的方式显示。我可以以某种方式将模式传递给 toString() 方法吗?
编辑
我将我的对象的属性更改为字符串类型,尽管它更容易呈现。将它们转换为日期的原因是,我需要计算两个人之间的持续时间,但这不是我无法解决的问题。感谢社区。p>
【问题讨论】:
-
要真正回答您的问题,请将 SimpleDateFormat 子类化并覆盖 toString 函数。我个人不会这样做,因为有更简单的方法可以实现您想要实现的目标
-
@InsaneCat 我相信提问者将能够找到所有答案,包括您的答案,而无需这些 cmets 的参考。您的评论带有攻击性气味,您可以将其删除。
-
顺便考虑扔掉长期过时且臭名昭著的麻烦
SimpleDateFormat和朋友,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代Java日期和时间API .使用起来感觉好多了。 -
仅供参考,
java.util.Date、java.util.Calendar和java.text.SimpleDateFormat等麻烦的旧日期时间类现在已被 java.time 类所取代。许多 java.time 功能在ThreeTen-Backport 项目中被反向移植到Java 6 和Java 7。在ThreeTenABP 项目中进一步适用于早期的Android。见How to use ThreeTenABP…。