asp.net | Часовой пояс | Формат | CultureInfo

#c# #asp.net #datetime

#c# #asp.net #дата и время

Вопрос:

Мне нужно преобразовать дату и время в формат en-us culture…

но наши пользователи находятся в другом регионе; некоторые люди следуют

ДД.ММ.ГГГГ чч: мм:ss tt,

Я получаю сообщение об ошибке

«Строка не была распознана как допустимая дата-время»

при преобразовании

часовой пояс в ММ / ДД/ ГГГГ чч: мм: ss tt (en-us).

 System.Globalization.CultureInfo oCulture = new System.Globalization.CultureInfo("en-US", false);

        public string CultureStringFormat(string Date)
        {
            DateTime _Datetime = DateTime.Now;
            try
            {
                _Datetime = DateTime.Parse(Date);   
                return _Datetime.ToString("G", oCulture);
            }
            catch (Exception ex)
            {
                try
                {
                    _Datetime = DateTime.Parse(Date, oCulture);
                    return _Datetime.ToString("G", oCulture);
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }
            }
            return "";
        }

        public DateTime CultureDateFormat(string Date)
        {
            try
            {               
               return DateTime.Parse(Date, oCulture, DateTimeStyles.NoCurrentDateDefault);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return DateTime.Now;
        }




    Thread.CurrentThread.CurrentCulture = oCulture;
    string sDate = CultureStringFormat("28.12.2011 10:15:07"); // i'm getting an Error
    DateTime dtDate = CultureDateFormat("28.12.2011 10:15:07"); // Error

    string sDate1 = CultureStringFormat("12.27.2011 10:15:07"); // i'm getting success  12/27/2011 10:15:07 AM
    DateTime dtDate1 = CultureDateFormat("12.27.2011 10:15:07"); //success  12/27/2011 10:15:07 AM



      Thread.CurrentThread.CurrentCulture = oCulture; //Without this line ...

    string sDate = CultureStringFormat("28.12.2011 10:15:07"); // success 12/28/2011 10:15:07 AM
    DateTime dtDate = CultureDateFormat("28.12.2011 10:15:07"); // Error

    string sDate1 = CultureStringFormat("12.27.2011 10:15:07");// success 12/27/2011 10:15:07 AM
    DateTime dtDate1 = CultureDateFormat("12.27.2011 10:15:07");// Wrong 27.12.2011 10:15:07
  

Ответ №1:

Вам нужно использовать DateTime.TryParseExact . Приведенный ниже фрагмент должен помочь вам двигаться в правильном направлении:

 string myDate = "17.11.2011 08:00:00 AM";
DateTime parsedDate;

DateTime.TryParseExact(myDate,
                       "dd.MM.yyyy hh:mm:ss tt",
                       CultureInfo.InvariantCulture,
                       System.Globalization.DateTimeStyles.None,
                       out parsedDate);
  

Ответ №2:

 public DateTime? GetDate(string dateString)
{
    var formats = new string[] 
    {
        "dd.MM.yyyy hh:mm:ss",
        "MM/dd/yyyy hh:mm:ss",
        "dd.MM.yyyy HH:mm:ss",
        "MM/dd/yyyy HH:mm:ss",
        "dd.MM.yyyy hh:mm:ss tt",
        "MM/dd/yyyy hh:mm:ss tt"        
    };
    DateTime date;
    if ( DateTime.TryParseExact(dateString, formats, CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out date))
    {
        return date;
    }   
    return null;
}