Добавить AM/PM ко времени

Мой datetime находится в этом формате 2017-01-15T21:00-07:00, поэтому я разбираю его так

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 к моему времени?


person StarsFlyFree FromCozyNights    schedule 16.01.2017    source источник
comment
21:00-07:00 это диапазон или что? Если 07 для секунд, то что означает последний 00?   -  person Ghasan غسان    schedule 16.01.2017
comment
Проверьте это: stackoverflow.com/questions/7875259/, а также: stackoverflow.com/questions/13044603/   -  person Mrinal Kamboj    schedule 16.01.2017
comment
Ваш DateTime НЕ имеет формат 2017-01-15T21:00-07:00. Это string. DateTime НЕ имеет формат — это просто число. Только когда вы вызываете .ToString(...), вы создаете string, у которого есть формат.   -  person Enigmativity    schedule 16.01.2017
comment
@Enigmativity - извините за неправильное понимание DateTime и String, когда дело доходит до DateTime или String. Как насчет применимого примера решения моей проблемы, а не словесной критики или урока по переменным.   -  person StarsFlyFree FromCozyNights    schedule 16.01.2017
comment
Вы можете взглянуть на ParseExact и найти format, который вы также можете установить для себя.   -  person Mohit Shrivastava    schedule 16.01.2017
comment
@Ghasan - нет, это в строковом формате (не знаю, почему они называют его DateOrTimestamp, если это строка)   -  person StarsFlyFree FromCozyNights    schedule 16.01.2017
comment
@MohitShrivastava - понял. Если вы поставите в качестве ответа, я принимаю.   -  person StarsFlyFree FromCozyNights    schedule 16.01.2017
comment
@StarsFlyFreeFromCozyNights Посмотрите обновленный ответ. :)   -  person Mohit Shrivastava    schedule 16.01.2017
comment
@StarsFlyFreeFromCozyNights - Извините, не было ругани. Просто пытаюсь четко прояснить взаимосвязь между DateTime и форматами даты/времени.   -  person Enigmativity    schedule 16.01.2017


Ответы (2)


Это может помочь вам

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");
person Mohit Shrivastava    schedule 16.01.2017
comment
До сих пор не добавлены am/pm - person StarsFlyFree FromCozyNights; 16.01.2017
comment
Я не понимаю, чего ты добиваешься? - person StarsFlyFree FromCozyNights; 16.01.2017
comment
Работает некорректно в зависимости от настроенного формата системного времени. В Windows вы можете настроить это здесь: (Панель управления | Язык | Изменить формат даты, времени или чисел | Дополнительные настройки... | Время) см. форматы времени AM и PM. Я продолжал получать утро, а не утро - person Liam Mitchell; 18.01.2018

Чтобы сделать что-то подобное, мне пришлось создать CultureInfo на основе eu-US, но со вторым аргументом, установленным в false, чтобы не допускать переопределения форматов системой/пользователем.

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

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

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

person Liam Mitchell    schedule 18.01.2018