2015-11-02 6 views
0
if (!IsPostBack && !Page.IsCallback) 
{ 
    double OffsetHrs = GetTimeZoneOffsetFromCookie(); 
    string dateFormat = ServiceManager.LocalizationService.GetString("AppHeaderTop", "DateFormat", "g"); 
    CultureSelected CultureSelected = GetCultureSelected(); 
    ASPxLabelCurrentTime.Text = DateTime.Now.ToUniversalTime().AddHours(-OffsetHrs).ToString(dateFormat);     
if (CultureSelected.CultureCode != "en-US") 
{ 
    DateTimeFormatInfo usDtfi = new CultureInfo("en-US", false).DateTimeFormat; 
    DateTimeFormatInfo currentDtfi = new CultureInfo(CultureSelected.CultureCode, false).DateTimeFormat; 
    ASPxLabelCurrentTime.Text = Convert.ToDateTime(ASPxLabelCurrentTime.Text, usDtfi).ToString(currentDtfi.ShortDatePattern); //what can i Use here ? 
}    

Пусть говорят Выход ASPxLabelCurrentTime.Text для en-US культуры 11/2/2015 4:14 PM (70) Если я выбираю определенную культуру Я хочу, чтобы этот DateTime 11/2/2015 4:14 PM (70) появиться в этом конкретном формате культуры.Convert (изменить) текущий DateTime в соответствии с культурой в C#

+0

Избегайте 'Convert.ToDateTime', вместо этого используйте' DateTime.ParseExact'. – Dai

+0

Если я использую DateTime.ParseExact, как я могу представить «формат» для разных культур. что может быть синтаксисом для использования другой культуры .. ?? – virtualreality

+0

@virtualreality Это зависит от настроек строки и культуры. Например, культура должна быть «PM» в свойстве «PMDesignator». –

ответ

1

Ваш вопрос кажется неясным, но я стараюсь сделать снимок.

Прежде всего, что это такое (70)? Откуда это? en-US культура не может проанализировать эту строку без использования ее в строковом литеральном разделителе с помощью ParseExact или TryParseExact методов. С другой стороны, поскольку вы оцениваете ASPxLabelCurrentTime.Text результат DateTime.Now.ToUniversalTime().AddHours(-OffsetHrs).ToString(dateFormat) код, я не верю, что это (70) часть действительно вопрос по этому вопросу.

Во-вторых, если понятно, проблема в использовании DateTime.ToString(string).

ASPxLabelCurrentTime.Text = Convert.ToDateTime(ASPxLabelCurrentTime.Text, usDtfi) 
            .ToString(currentDtfi.ShortDatePattern); 
            // ^^^ Problem seems here 

Окей, скажем, вы успешно разобрать этот ASPxLabelCurrentTime.Text с usDtfi культуры (которая en-US), но с этим .ToString(string) метод, вы не используете currentDtfi настройки на самом деле, вы используете CurrentCulture настройки при создании отформатирован строки представление вашего DateTime.

От DateTime.ToString(String) doc;

Преобразует значение текущего объекта DateTime в эквивалентное строковое представление с использованием указанного формата и форматирование конвенций текущей культуры.

Поскольку мы не знаем, что GetCultureSelected метод возвращает точно, он может или не может быть такой же культуры с currentDtfi.

Я сильно подозреваемый, вы можете решить эту проблему с помощью , что культуры в качестве второго параметра в ToString способом, как;

ASPxLabelCurrentTime.Text = Convert.ToDateTime(ASPxLabelCurrentTime.Text, usDtfi) 
            .ToString(currentDtfi.ShortDatePattern, currentDtfi); 

Если это (70) действительно часть на вашей строке, вам нужно ParseExact или TryParseExact методов поставить точный формат этого.

string s = "11/2/2015 4:14 PM (70)"; 
DateTime dt; 
if(DateTime.TryParseExact(s, "MM/d/yyyy h:mm tt '(70)'", CultureInfo.GetCultureInfo("en-US"), 
          DateTimeStyles.None, out dt)) 
{ 
    ASPxLabelCurrentTime.Text = dt.ToString(currentDtfi.ShortDatePattern, currentDtfi); 
} 
+0

Да. Как вы сказали, проблема заключается в ASPxLabelCurrentTime.Text = Convert.ToDateTime (ASPxLabelCurrentTime.Text, usDtfi) .ToString (currentDtfi.ShortDatePattern); // ^^^ Проблема возникает здесь .................................. Когда я использую это перевод 11/3/2015 9:14 AM по 03/11/2015. Время не отображается .... И нам не о чем беспокоиться (70). – virtualreality

+0

@virtualreality Поскольку вы используете 'ShortDatePattern' вашей' CurrentCulture', которая является частью отображения даты только _only_. Что вы хотите в результате именно на вашем 'ASPxLabelCurrentTime.Text'? –

+0

Я хочу что-то вроде 03/11/2015 09:30 ... – virtualreality

Смежные вопросы