簡體   English   中英

在Java中將字符串日期轉換為美國格式

[英]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.time

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。 InstantUTC時間軸上的時刻。

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.

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