簡體   English   中英

Java字符串到日期的轉換格式不同

[英]Java String to Date Conversion in different format

所以我有String trDate="20120106"; 並想獲取Date trDate=2012-01-06並嘗試使用SimpleDateFormat更改模式,但首先我要parse字符串,然后生成日期,然后嘗試調用給我返回字符串的format ,但我需要日期,任何建議,這是我的代碼:

String trDate="20120106";    
Date tradeDate = new SimpleDateFormat("yyyymmdd", Locale.ENGLISH).parse(trDate);
String krwtrDate = new SimpleDateFormat("yyyy-mm-dd", Locale.ENGLISH).format(tradeDate);
Date krwTradeDate = new SimpleDateFormat("yyyy-mm-dd", Locale.ENGLISH).parse(krwtrDate);

這是類似的問題,但不能回答我的問題

我只需要將轉換后的字符串轉換為Date format因為我需要將其傳遞給僅需要Date object另一個函數。

如果有人可以舉一個如何從yyyymmdd格式的string獲取yyyy-mm-dd格式的date示例,我們將不勝感激?

---答案因評論而更新---

好的,因此您使用的API需要一個字符串,該字符串代表格式為2012-04-20的日期

然后,您需要解析格式錯誤的Date ,然后以所需的格式將其再次格式化。

String trDate="20120106";    
Date tradeDate = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH).parse(trDate);
String krwtrDate = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH).format(tradeDate);

還要注意,我更改了您的“月”代號,因為您犯了一個非常普遍的錯誤,即將m用作月。 由於使用“ hours:minutes:seconds”,日期格式具有兩個常見的“名稱”,均以m ,分鍾和月開頭。 因此,大寫M使用幾個月,而小寫m使用幾分鍾。 我敢打賭,這是您遇到問題的真正原因。

---原始帖子如下---

如果您的API需要一個java.util.Date ,那么您不需要做太多的事情。 您實際上只有兩行就有java.util.Date

String trDate="20120106";    
Date tradeDate = new SimpleDateFormat("yyyymmdd", Locale.ENGLISH).parse(trDate);

但是,如果不快速回顧一下java.util.Date是什么,那么該解決方案可能就沒有意義。 Dates是事物,但是它們的呈現方式與它們的本質不同。

在任何時候,都有一個Date實例描述該時刻。 Date實例的顯示方式並不一致,這在很大程度上取決於觀眾說什么語言,他們所在的國家/地區,該國家/地區制定的規則(夏令時)以及他們以前的文化背景。

因此, Date沒有單個關聯的演示文稿。 這就是為什么不贊成使用Date上的每個“獲取X”方法(其中X為日,月,時,年等)的原因,除了從0日期開始獲取毫秒數(稱為歷元)。

因此,對於要正確顯示的每個Date ,您需要使用特定於語言,國家/地區,時區和文化先例的規則將其轉換為String 理解這些規則並應用它們的對象是DateFormat

這意味着,一旦獲得Date ,就不需要重新格式化它並重新解析它以獲得“正確的” Date因為兩個日期應該是相同的(對於相同的語言環境)。

你能給我一個例子,如何從yyyymmdd格式的字符串中獲取yyyy-mm-dd格式的日期

Date對象沒有與之關聯的格式。 在內部,它通常只存儲一個long值。

如果使用其他方法來打印日期,那么很遺憾,您無法控制結果輸出的格式。

我聽得懂嗎?

您有一個僅接受Date作為參數的方法,並且該方法在內部使用toString()將Date轉換為格式錯誤的字符串?

最好是修改該方法,並將toString()與SimpleDateFormat.format()交換。

如果您不能修改該方法,則可以用OO“欺騙”,即用您自己的實現替換toString方法,例如:

public class MyDate {
   private static final FMT = SimpleDateFormat("yyyy-mm-dd", Locale.ENGLISH);

   MyDate(long time) {
      super(time);
   }

   String toString() {
      return FMT.format(this);
   }
}

然后用

xxx = myMethod(new MyDate(new SimpleDateFormat("yyyymmdd", Locale.ENGLISH).parse(trDate).getTime()));

但是,如果該方法未在內部使用toString,而在SimpleDateFormat中使用了錯誤的格式,則我的主張不起作用。

如果字符串日期總是采用您提到的格式,則可以使用subString方法提取年,月和日。

字符串trDate =“ 20120106”;

對字符串使用subString方法提取年,月和日

字符串年份=“ 2012”;
字符串月份=“ 01”;
字符串日=“ 06”;

並將其解析為整數。 假設您將字符串解析為整數

int intYear = 2012;
int intMonth = 01;
int intDay = 06;

Calendar calendar = new GregorianCalendar(intYear,intMonth-1,intDay);

日期日期=新日期(日歷);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM