3 回答

TA貢獻1752條經驗 獲得超4個贊
博士
format.parse( Info.get("TIME") ) // Get a legacy `java.util.Date` object.
.toInstant() // Convert from legacy class to modern class.
.atOffset( // Convert from the basic `Instant` class to the more flexible `OffsetDateTime` class.
ZoneOffset.UTC // Specify the offset-from-UTC in which you want to view the date and time-of-day.
)
.format( // Generate text representing the value of our `OffsetDateTime` object.
DateTimeFormatter.ofPattern( "dd/MM/yyyy HH:mm:ss" ) // Specify your custom formatting pattern. Better to cache this object, in real work.
) // Returns a `String
Date幾年前被Instant. 該Instant::toString方法使用了一種更好的格式,一種現代標準格式。
Instant.now().toString()
2019-06-04T20:11:18.607231Z
轉換您的Date對象,myDate.toInstant().
細節
該Object::toString方法并不意味著靈活。其目的是在調試或記錄時提供對象的簡單視圖。
但是,如您所見,java.util.Date::toString實現很糟糕。
首先,將 JVM 當前的默認時區應用于存儲在Date對象中的時刻。那一刻實際上是在UTC中。這種誤報會造成時區實際上不在對象中的錯覺。
其次,該Date::toString方法使用了糟糕的格式,只有英文,人類難以閱讀,機器也難以解析。
這個Date班還有很多其他問題。您根本不應再使用此類。隨著 JSR 310 的采用,java.time.Instant類取代了它。
您應該盡可能替換Date為Instant。在你不能的地方,轉換。調用添加到舊類的新方法。
Instant instant = myJavaUtilDate.toInstant() ;
幸運的是,上的toString方法Instant設計得更好。它告訴你真相,UTC中的一個時刻。它使用標準的ISO 8601格式。發明該標準的目的是為了以一種既易于機器解析又易于跨文化的人類閱讀的方式將日期時間值作為文本進行通信。
String output = instant.toString() ;
2019-06-04T20:11:18.607231Z
因此Instant對象列表將如下所示。
Instant now = Instant.now();
List < Instant > instants = List.of( now.minus( 1L , ChronoUnit.HOURS ) , now , now.plus( 20L , ChronoUnit.MINUTES ) );
String output = instants.toString();
[2019-06-04T19:41:51.210465Z, 2019-06-04T20:41:51.210465Z, 2019-06-04T21:01:51.210465Z]
你的代碼片段
至于您的代碼片段,請轉換為一個java.time.OffsetDateTime對象,并使用自定義格式模式生成文本。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/yyyy HH:mm:ss" ) ;
…
if(Info.get("TIME")!=null)
{
try {
Date date = format.parse( Info.get("TIME") ) ;
Instant instant = date.toInstant() ;
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
String output = odt.format( f ) ;
message.TimeHistory.add(date);
}
catch (Exception e){
}
}

TA貢獻1802條經驗 獲得超10個贊
如果你做了類似的事情,System.out.println(TimeHistory)
或者如果你在調試時“只”看你的日期,就會調用java.util.Date
stoString()
方法。System.out.println(TimeHistory)
調用java.util.AbstractCollection
stoString()
方法,它執行對每個項目toString()
方法的調用。
如果你想改變這種行為,你應該擴展java.util.Date
并覆蓋toString()
-method

TA貢獻2051條經驗 獲得超10個贊
最好的方法是使用 simpleDateFormat 類,您可以在其中使用字符串指定格式: https ://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
但是 Date 對象是舊的,你可以使用 Java8 日期類來獲取時間
編輯后:顯然,現在很明顯您想更改 ArrayAdapter 的行為,因為默認情況下它使用 OBJECT.toString() 方法來顯示數據,因此它使用 java.util.Date.toString()。你想改變這種行為,這就是你想要的:
在 ArrayAdapter 中顯示自定義對象 - 簡單的方法?
添加回答
舉報