![](/img/trans.png)
[英]Java date string conversion to different format but with the same timezone
[英]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.