[英]converting a string date into US format in java
我有以下代碼,其中日期以字符串類型出現,我必須將其設置為美國格式,因此下面顯示了它
private static final SimpleDateFormat usOutputDate = new SimpleDateFormat("MM/dd/yyyy");
在方法中,我編寫了以下代碼,在dealDateString
該值即將於02-Mar-2015
到來
// dealDateString = 02-Mar-2015
java.util.Date dealDate = extractDate(dealDateString);
//here its value get converted in US format that is 03/02/2015
String dd = usOutputDate.format(dealDate);
DateFormat format = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
// ***issue comes here as it get back converted in US format ***
java.util.Date date = format.parse(dd);
brokerInvoiceLineItem.setDealDate(new Date(date));
如上面的代碼所示, String dd
中的值是03/02/2015
但問題出在format變量,其值被轉換為UK格式,我不希望這樣做,請告知我如何將其轉換為UK格式,它已經被轉換為以前存儲在String dd
中的美國格式。
Silambarasan Poonguti 接受的答案和Ramesh Ponnada 接受的 其他答案都是正確的。 但是,兩者都已過時,使用了與最早的Java版本捆綁在一起的舊的日期時間類。 這些類已被證明是麻煩,混亂和有缺陷的。
Java 8和更高版本中內置的java.time框架取代了舊的java.util.Date/.Calendar類。 新課程的靈感取自於成功的Joda-Time框架,該框架旨在作為其繼任者,其概念相似但經過重新架構。 由JSR 310定義。 由ThreeTen-Extra項目擴展。 請參閱《 Oracle教程》 。
LocalDate
這些新類包括LocalDate
用於處理沒有日期和時區的僅日期值。 盡管LocalDate不包含時區,但是請注意,時區對於確定日期(例如“今天”)至關重要。 隨着東部新天的到來,世界各地的日期隨時都不同。
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ) ;
要解析字符串,請指定編碼模式。 此模式類似於舊的java.text.SimpleTextFormat中使用的模式,但並不完全相同。 因此,請務必仔細研究java.time.format.DateTimeFormatter文檔。
請注意,我們使用三元組M
來指定期望的日期名稱的縮寫。 這是解決課題中問題的關鍵。
還要注意,我們指定了一個語言環境,該語言環境將java.time縮寫為day的人類語言告訴了java.time。
String input = "02-Mar-2015";
Locale locale = Locale.US;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "dd-MMM-yyyy" ).withLocale ( locale );
LocalDate localDate = LocalDate.parse ( input , formatter );
轉儲到控制台。 默認情況下,java.time中的toString
方法使用標准ISO 8601格式。
System.out.println ( "localDate: " + localDate );
本地日期:2015-03-02
當生成日期時間值的String表示形式時,通常最好讓java.time為您本地化它,而不是采用特定的格式。 java.time.format包具有用於此類工作的類。
注意對withLocale
的調用。 語言環境指定兩個元素,即預期格式的文化規范和用於日期和月份名稱的人類語言。 如果未指定語言環境,則將隱式應用JVM當前的默認語言環境。 最好明確一點,因為默認值可以隨時更改。
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.SHORT ).withLocale ( Locale.US );
String output = today.format ( formatter );
轉儲到控制台。
System.out.println ( "output: " + output );
輸出:15/12/29
如果您堅持使用特定格式,請指定編碼模式。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MM/dd/yyyy" );
String output = today.format ( formatter );
輸出:2015/12/29
如果手頭有java.util.Date,請轉換為java.time。 Instant
是UTC時間軸上的時刻。
Instant instant = myJUDate.toInstant();
指定要用來形成日期的時區,從而產生ZonedDateTime
。
ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId ) ;
然后要求生成LocalDate,並從ZonedDateTime中提取其值。
LocalDate localDate = zdt.toLocalDate();
嘗試這個...
try {
//parsing date format
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
String dealDateString = "02-Mar-2015";
Date date = formatter.parse(dealDateString);
TimeZone tz = TimeZone.getDefault();
//converting date format for US
SimpleDateFormat sdfAmerica = new SimpleDateFormat("MM/dd/yyyy");
TimeZone tzInAmerica = TimeZone.getTimeZone("America/New_York");
sdfAmerica.setTimeZone(tzInAmerica);
String sDateInAmerica = sdfAmerica.format(date); // Convert to String first
System.out.println("Date (String) : " + sDateInAmerica);
} catch (Exception bug) {
bug.printStackTrace();
}
您可以嘗試以下代碼:
SimpleDateFormat ukDateFormat = new SimpleDateFormat("dd-MMM-yyyy");
SimpleDateFormat usDateFormat = new SimpleDateFormat("MMM-dd-yyyy", Locale.US);
java.util.Date dealDate = ukDateFormat.parse("02-Mar-2015");
String dateInUSFormat = usDateFormat.format(dealDate);
System.out.println(dd); // Here you have date String in US format.
鏈接中有許多有關如何在Java中進行日期轉換的示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.