2014-02-11 190 views
4

我已使用SimpleDateFormat格式化了日期。從默認語言環境轉換爲英語語言環境的日期

DateFormat dateForm = new SimpleDateFormat("HH mm ss dd MMM ''yy"); 
      String dateOutput = dateForm.format(new Date()); 

這使用設備的默認語言環境,例如法語或西班牙語。

如何將此字符串(用其他區域設置格式)轉換回Date對象格式爲Locale.ENGLISH

當前,當我嘗試將字符串轉換回日期時,我得到了不可解析的日期異常。這是由以下事實導致的日期用不同的語言環境

+0

您是否需要將字符串轉換爲日期? –

+0

@Arju是的。我知道如何在字符串與英文處於相同的語言環境中時執行此操作,但不知道如何處理。 – RiThBo

回答

7

這可以工作,爲您保存

SimpleDateFormat sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.ENGLISH); 
String dateOutput = sdf.format(new Date()); 

編輯

我想到的方法是用Calendar打破它對象並用另一種語言格式化它。試試這個

SimpleDateFormat sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.getDefault()); 
Calendar cal = Calendar.getInstance(); 
int day = 0, month = 0, year = 0, hour = 0, minute = 0, sec = 0; 
String loc = Locale.getDefault().getDisplayLanguage(); 
try { 
    Date testDate = sdf.parse(date); 
    cal.setTime(testDate); 
    sec = cal.get(Calendar.SECOND); 
    minute = cal.get(Calendar.MINUTE); 
    hour = cal.get(Calendar.HOUR); 
    day = cal.get(Calendar.DATE); 
    month = cal.get(Calendar.MONTH); 
    year = cal.get(Calendar.YEAR); 
} catch (ParseException e) { 
    if(loc.equals(Locale.ENGLISH.getDisplayLanguage())){ 
     sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.FRENCH); 
     try { 
      Date testDate = sdf.parse(date); 
      cal.setTime(testDate); 
      sec = cal.get(Calendar.SECOND); 
      minute = cal.get(Calendar.MINUTE); 
      hour = cal.get(Calendar.HOUR); 
      day = cal.get(Calendar.DATE); 
      month = cal.get(Calendar.MONTH); 
      year = cal.get(Calendar.YEAR); 
     } catch (ParseException ee) { 
      sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.FRENCH); 
      try { 
       Date testDate = sdf.parse(date); 
       cal.setTime(testDate); 
       sec = cal.get(Calendar.SECOND); 
       minute = cal.get(Calendar.MINUTE); 
       hour = cal.get(Calendar.HOUR); 
       day = cal.get(Calendar.DATE); 
       month = cal.get(Calendar.MONTH); 
       year = cal.get(Calendar.YEAR); 
      } catch (ParseException eex) { 

      } 
     } 
    } 
    else if (loc.equals(Locale.FRENCH.getDisplayLanguage())){ 
     sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.ENGLISH); 
     try { 
      Date testDate = sdf.parse(date); 
      cal.setTime(testDate); 
      sec = cal.get(Calendar.SECOND); 
      minute = cal.get(Calendar.MINUTE); 
      hour = cal.get(Calendar.HOUR); 
      day = cal.get(Calendar.DATE); 
      month = cal.get(Calendar.MONTH); 
      year = cal.get(Calendar.YEAR); 
     } catch (ParseException fe) { 

     } 
    } 
} 
cal.set(Calendar.SECOND, sec); 
cal.set(Calendar.MINUTE, minute); 
cal.set(Calendar.HOUR, hour); 
cal.set(Calendar.YEAR, year); 
cal.set(Calendar.MONTH, month); 
cal.set(Calendar.DAY_OF_MONTH, day); 
if(loc.equals(Locale.ENGLISH.getDisplayLanguage())) 
     sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.getDefault()); 
else if(loc.equals(Locale.FRENCH.getDisplayLanguage())) 
    sdf = new SimpleDateFormat("HH mm ss dd MMM ''yy", Locale.getDefault()); 
Date convertedLangDate = cal.getTime(); 
String newDate = sdf.format(convertedLangDate); 

這對我很有用,但它不是最優雅的解決方案。用它來代碼

+0

如何將格式不同的字符串轉換爲此格式? – RiThBo

+0

你支持哪些語言?這是爲每種語言嗎? – BigT

+0

是的,但我目前在切換法語和英語時遇到問題。 – RiThBo

-1

試試這門課將西班牙語日期轉換成英語或英語日期轉換成西班牙語。只需稍作更改即可改變文化。

Imports System 
Imports System.Globalization 
Imports System.Threading 
Imports Microsoft.VisualBasic 
Public Class ClassDateLanguageConversions 

Public Function SpanishToEnglish(_ 
    p_strSpanishDateTime As String, _ 
    Optional p_blnFormal As Boolean = False _ 
    ) As DateTime 
    SpanishToEnglish = Nothing 
    Try 
     Dim strReformattedDate As String = p_strSpanishDateTime 
     'Handle the abiguity of Tuesday abbrieviation 
     ' and March abrieviation by normalizing 
     strReformattedDate = strReformattedDate.ToLower.Replace(_ 
      "martes, marzo", "mar, marzo") 
     strReformattedDate = strReformattedDate.ToLower.Replace(_ 
      "martes marzo", "mar, marzo") 
     strReformattedDate = strReformattedDate.ToLower.Replace(_ 
      "mar marzo", "mar, marzo") 
     strReformattedDate = strReformattedDate.ToLower.Replace(_ 
      "martes, mar", "mar, marzo") 
     strReformattedDate = strReformattedDate.ToLower.Replace(_ 
      "martes mar", "mar, marzo") 
     strReformattedDate = strReformattedDate.ToLower.Replace(_ 
      "mar, mar", "mar, marzo") 
     strReformattedDate = strReformattedDate.ToLower.Replace(_ 
      "mar mar", "mar, marzo") 
     'Shorten final date string by default 
     If Not p_blnFormal Then 
      strReformattedDate = strReformattedDate.ToLower.Replace(_ 
       " de ", " ") 'Remove "the" 
      strReformattedDate = strReformattedDate.ToLower.Replace(_ 
       " el ", " ") 'Remove "on the" 
     End If 
     Thread.CurrentThread.CurrentCulture = New CultureInfo("es") 
     Dim datetimeSpanish As DateTime = DateTime.Parse(strReformattedDate) 
     Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US") 
     SpanishToEnglish = datetimeSpanish 
    Catch ex As Exception 
     'Returns null 
    End Try 
End Function 

Public Function EnglishToSpanish(_ 
ByVal p_datetimeEnglishDateTime As DateTime, _ 
Optional ByVal p_blnFormal As Boolean = False _ 
) As String 
    EnglishToSpanish = "" 
    Try 
     Thread.CurrentThread.CurrentCulture = New CultureInfo("es") 
     Dim strSpanishDate As String = _ 
      p_datetimeEnglishDateTime.ToLongDateString 
     'Shorten final date string by default 
     If Not p_blnFormal Then 
      strSpanishDate = strSpanishDate.Replace(_ 
       " de ", " ") 'Remove "the" 
      strSpanishDate = strSpanishDate.Replace(_ 
       " el ", " ") 'Remove "on the" 
     End If 
     EnglishToSpanish = strSpanishDate 
     Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US") 
    Catch ex As Exception 
     'Returns null 
    End Try 
End Function 
End Class 

Public Class Form1 

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     Dim objClassDateLanguageConversions As New ClassDateLanguageConversions 
     Dim datetimeEnglish1 As DateTime = objClassDateLanguageConversions.SpanishToEnglish("lunes, 24 de marzo de 2014") 
     Dim datetimeEnglish2 As DateTime = objClassDateLanguageConversions.SpanishToEnglish("Mar, mar 4 2014") 
     Dim datetimeEnglish3 As DateTime = objClassDateLanguageConversions.SpanishToEnglish("Lun, marzo 24 2014") 
     Dim datetimeEnglish4 As DateTime = objClassDateLanguageConversions.SpanishToEnglish("lun, abr 28 2014") 
     Dim datetimeEnglish5 As DateTime = objClassDateLanguageConversions.SpanishToEnglish("lunes, 24 marzo 2014") 

     Dim strSpanish1 As String = objClassDateLanguageConversions.EnglishToSpanish(Now) 
     Dim datetimeEnglish10 As DateTime = objClassDateLanguageConversions.SpanishToEnglish(strSpanish1) 
     Dim strSpanish2 As String = objClassDateLanguageConversions.EnglishToSpanish("Mar 4, 2014") 
     Dim datetimeEnglish11 As DateTime = objClassDateLanguageConversions.SpanishToEnglish(strSpanish2) 
     Dim strSpanish3 As String = objClassDateLanguageConversions.EnglishToSpanish("Mar 4, 2014 9:00pm") 
     Dim datetimeEnglish12 As DateTime = objClassDateLanguageConversions.SpanishToEnglish(strSpanish3) 
     Dim strSpanish4 As String = objClassDateLanguageConversions.EnglishToSpanish("Thursday May 1, 2014") 
     Dim datetimeEnglish13 As DateTime = objClassDateLanguageConversions.SpanishToEnglish(strSpanish4) 
    End Sub 
End Class