2017-01-16 20 views
-3

Мои datetime в этом формате 2017-01-15T21:00-07:00 поэтому я разборе его как такДобавить AM/PM Для времени

string ADT = Convert.ToString(timestamp.DateOrTimestamp); 
int index = ADT.IndexOf("T"); 
string FADT = (index > 0 ? ADT.Substring(0, index) : ""); 
DateTime dtFADT = DateTime.ParseExact(FADT, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); 
string ADT1 = ADT.Split('T', '-')[3]; 

Console.WriteLine("{0}: {1}", timestamp.Type, dtFADT.ToString("MM/dd/yyyy") + " " + String.Format("{0:h:mm t}", ADT1)); 

, который будет писать в консоль: Delivery: 01/15/2017 09:00:00

Почему делает то String.Format() не добавить в AM/PM к моему времени?

+0

'21: 00-07: 00' этот диапазон или что? Если '07' в секундах, то что означает последний' 00'? –

+0

Проверьте это: http://stackoverflow.com/questions/7875259/how-do-i-get-the-am-pm-value-from-a-datetime , а также: http://stackoverflow.com/ Вопросы/13044603/convert-time-span-value-to-format-hhmm-am-pm-using-c-sharp –

+0

Ваша 'DateTime' ** NOT ** в формате' 2017-01-15T21: 00- 07: 00'. Это строка. 'DateTime' делает ** NOT ** имеет формат - это просто номер. Только когда вы вызываете '.ToString (...)', что вы создаете 'string', который имеет формат. – Enigmativity

ответ

1

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

string smdt = "2017-01-15T21:00-07:00"; 
string format = "yyyy-MM-ddTHH:mmzzz"; 
DateTime dt = DateTime.ParseExact(smdt, format, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); 
string extractedDate = dt.ToString("dd/MM/yy h:mm tt"); 
+0

Еще нет am/pm добавлено в –

+0

Я не понимаю, что вы после? –

+0

Не работает правильно в зависимости от настроенного формата системного времени. В Windows вы можете настроить это здесь: (Панель управления | Язык | Изменить дату, время или числовые форматы | Дополнительные настройки ... | Время) см. Символы AM и PM. Форматы времени. Я продолжал получать a.m, а не AM –

0

Чтобы сделать что-то подобное, я закончил тем, что сделать CultureInfo на основе от США и ЕС, но с вторым аргументом установлен в ложь, чтобы не допустить системы/пользователя через -rides форматов.

public static CultureInfo enUS = new CultureInfo("en-US", false); 

Тогда я мог бы использовать его в коде, где мне нужно отформатировать дату разбора или ToString с датой/временем, имеющим Tt части формата было бы поставить AM или PM, что я хотел.

Системный язык на ПК, на котором запущено программное обеспечение, отличается от моего. Они использовали m.m или Pm или что-то в этом роде. когда мы хотели использовать AM или PM.