2014-02-11 2 views
4

Я сохранил даты, форматируя их, используя SimpleDateFormat.Преобразование даты из стандартного языкового стандарта в английский язык

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

В этом случае используется язык по умолчанию устройства, например, французский или испанский.

Как преобразовать эту строку (отформатированную для другой локали) обратно в объект , отформатированный с помощью Locale.ENGLISH?

В настоящее время, когда я пытаюсь преобразовать строку обратно в дату, я получаю исключение исключительной даты. Это обусловлено тем фактом, что дата была сохранена с использованием другой локали

+0

Нужно ли преобразовать строку в дату? –

+0

@ Арю Да. Я знаю, как это сделать, когда строка находится в том же языке, что и АНГЛИЙСКИЙ, но не тогда, когда это не так. – RiThBo

ответ

7

Это может работать для вас

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

EDIT

Так я имею в виду, чтобы разбить его с 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); 

Это действительно работает для меня, однако это не самые элегантные решения. Tweek это для вашего кода.

+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 
Смежные вопросы