Java 如何更改列表的日期格式<;日期>;

Java 如何更改列表的日期格式<;日期>;,java,date,arraylist,format,android-arrayadapter,Java,Date,Arraylist,Format,Android Arrayadapter,我有一个列表,当我打印/显示它的内容时,我会以特定的格式获得日期。假设我想要以不同的格式打印列表,那么如何选择列表的打印格式呢 public List<Date> TimeHistory = new ArrayList<Date>(); ArrayAdapter<Date> adapter = new ArrayAdapter<Date>(getActivity(), R.layout.listview_timehistory, R.id.tvTi

我有一个列表,当我打印/显示它的内容时,我会以特定的格式获得日期。假设我想要以不同的格式打印列表,那么如何选择列表的打印格式呢

public List<Date> TimeHistory = new ArrayList<Date>();
ArrayAdapter<Date> adapter = new ArrayAdapter<Date>(getActivity(), R.layout.listview_timehistory, R.id.tvTime,TimeHistory);

最好使用SimpleDataFormat类,在该类中使用字符串指定格式:

但Date对象很旧,可以使用Java8日期类来表示时间

编辑后: 显然,现在很清楚您想要更改ArrayAdapter的行为,因为默认情况下它使用OBJECT.toString()方法来显示数据,所以它使用java.util.Date.toString()。如果要更改此行为,请执行以下操作:


最好使用SimpleDataFormat类,其中使用字符串指定格式:

但Date对象很旧,可以使用Java8日期类来表示时间

编辑后: 显然,现在很清楚您想要更改ArrayAdapter的行为,因为默认情况下它使用OBJECT.toString()方法来显示数据,所以它使用java.util.Date.toString()。如果要更改此行为,请执行以下操作:


如果您执行类似于
System.out.println(TimeHistory)
的操作,或者如果您在调试时“仅”观察日期,则调用
java.util.Date
s
toString()
方法
System.out.println(TimeHistory)
calls
java.util.AbstractCollection
s
toString()
Method,它执行对每个项的调用
toString()
Method


如果要更改此行为,您应该扩展
java.util.Date
并覆盖
toString()
-方法,如果您执行类似
System.out.println(TimeHistory)
的操作,或者如果您在调试时“仅”观察日期,则调用
java.util.Date
s
toString()
方法
System.out.println(TimeHistory)
calls
java.util.AbstractCollection
s
toString()
Method,它执行对每个项的调用
toString()
Method

如果要更改此行为,应扩展
java.util.Date
并覆盖
toString()
-method

tl;博士
Date
在几年前被
Instant
取代。
Instant::toString
方法使用了更好的格式,即现代标准格式

Instant.now().toString() 
2019-06-04T20:11:18.607231Z

将您的
Date
对象,
myDate.toInstant()

细节 这种方法并不意味着灵活。其目的是在调试或记录时提供对象的简化视图

但是,正如您所看到的,
java.util.Date::toString
实现非常糟糕

首先,将JVM的当前默认时区应用于
Date
对象中存储的时刻。那一刻实际上已经过去了。这种误报造成了时区的错觉,而实际上并不在对象中

其次,
Date::toString
方法使用了一种糟糕的格式,仅限英语,人类难以阅读,机器难以解析

Date
类还有许多其他问题。你不应该再使用这个类了。随着JSR310的采用,它被
java.time.Instant
类取代

您应该尽可能将
日期
替换为
即时
。在你不能转换的地方,转换。调用添加到旧类中的新方法

Instant instant = myJavaUtilDate.toInstant() ;
幸运的是,
Instant
上的
toString
方法设计得更好。它告诉你真相,一瞬间。它使用标准格式。该标准是专门为以一种既易于机器解析又易于跨文化阅读的方式将日期时间值作为文本进行通信而发明的

String output = instant.toString() ;
2019-06-04T20:11:18.607231Z

因此,
即时
对象的列表如下所示

Instant now = Instant.now();
List < Instant > instants = List.of( now.minus( 1L , ChronoUnit.HOURS ) , now , now.plus( 20L , ChronoUnit.MINUTES ) );
String output = instants.toString();
tl;博士
Date
在几年前被
Instant
取代。
Instant::toString
方法使用了更好的格式,即现代标准格式

Instant.now().toString() 
2019-06-04T20:11:18.607231Z

将您的
Date
对象,
myDate.toInstant()

细节 这种方法并不意味着灵活。其目的是在调试或记录时提供对象的简化视图

但是,正如您所看到的,
java.util.Date::toString
实现非常糟糕

首先,将JVM的当前默认时区应用于
Date
对象中存储的时刻。那一刻实际上已经过去了。这种误报造成了时区的错觉,而实际上并不在对象中

其次,
Date::toString
方法使用了一种糟糕的格式,仅限英语,人类难以阅读,机器难以解析

Date
类还有许多其他问题。你不应该再使用这个类了。随着JSR310的采用,它被
java.time.Instant
类取代

您应该尽可能将
日期
替换为
即时
。在你不能转换的地方,转换。调用添加到旧类中的新方法

Instant instant = myJavaUtilDate.toInstant() ;
幸运的是,
Instant
上的
toString
方法设计得更好。它告诉你真相,一瞬间。它使用标准格式。该标准是专门为以一种既易于机器解析又易于跨文化阅读的方式将日期时间值作为文本进行通信而发明的

String output = instant.toString() ;
2019-06-04T20:11:18.607231Z

因此,
即时
对象的列表如下所示

Instant now = Instant.now();
List < Instant > instants = List.of( now.minus( 1L , ChronoUnit.HOURS ) , now , now.plus( 20L , ChronoUnit.MINUTES ) );
String output = instants.toString();

你怎么打印日期的?如果使用SimpleDataFormat类,那么您可能需要使用
ArrayAdapter
。你能使用Java8功能吗?我并没有真正打印它们,我在listview中看到它们。是的,我可以使用Java8特性。我建议您不要使用