#c# #asp.net #datetime
#c# #asp.net #datetime
Вопрос:
Вероятно, простой вопрос —
Я считываю данные из нескольких файлов.
Моя проблема в том, что когда я считываю дату из американского файла, я разбираю ее следующим образом:
DateSold = DateTime.Parse(t.Date)
При этом выполняется разбор строки t.Преобразуйте дату в формат даты, однако он форматирует американскую дату в европейскую дату, например
Если дата указана в файле как 01.03.2011, она считывается как 3 января 2011 года, тогда как должно быть 1 марта 2011 года.
Есть ли способ сделать это так, чтобы он соответствовал европейской дате?
Ответ №1:
var dt = DateTime.ParseExact(t.Date, "MM/dd/yyyy", CultureInfo.InvariantCulture);
У самого DateTime нет форматирования, формат уместен только при преобразовании его в строку или из строки.
Чтобы просмотреть вашу дату в американском формате, вы передаете формат методу toString
string americanFormat = dt.ToString("MM/dd/yyyy");
Ответ №2:
Если вы анализируете дату из файла, который является файлом, отформатированным в США, тогда просто передайте информацию о культуре США в функцию parse следующим образом;
var usCulture = "en-US";
var dateValue = DateTime.Parse(dateString, new CultureInfo(usCulture, false));
Таким образом, вы можете просто поменять местами строку языка для разных регионов, необходимых для синтаксического анализа. Кроме того, вам больше не нужно изучать специфические нюансы формата datetime для каждой культуры as .Net позаботится об этом за вас, как и было задумано.
Комментарии:
1. Это вообще не отвечает на вопрос. OP спрашивал, как преобразовать дату в США в дату в ЕС, вы просто сказали ему, как преобразовать дату в США в дату в США.
2. Брайан Скотт сделал именно то, о чем просил OP. Дата, хранящаяся в dateValue, является интерпретацией dateString как американской даты, но если теперь она структурирована так, что вы можете запросить значение dateValue . Месяц. Если вы хотите отобразить его в европейском стиле, продолжайте и преобразуйте его обратно в строку, как показано в принятом ответе. Этот ответ очень полезен, поскольку он показывает синтаксический анализ с другим CultureInfo вместо жесткого кодирования формата даты.
Ответ №3:
Используйте DateTime.ParseExact
или DateTime.TryParseExact
при синтаксическом анализе и также указывайте строку формата при форматировании с помощью ToString
.
Обратите внимание, что после анализа не существует такого понятия, как «американская дата». У DateTime
значения нет понятия форматирования.
Похоже, что на самом деле вас интересует не Parse
часть, а часть форматирования, например
string formatted = dt.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
… но я бы рекомендовал вам явно контролировать как синтаксический анализ, так и форматирование.
Если у вас разные форматы файлов, вам нужно будет указывать разные строки формата при чтении каждого файла. Как вы затем форматируете данные, это отдельное решение.
Ответ №4:
Если вы заранее знаете формат, вы можете использовать DateTime.Выполните синтаксический анализ, используя американский формат в качестве строки вашего формата.
Ответ №5:
string formatteddate=DateTime.Now.ToString("d") // output: 11/8/2012
string formatteddate=DateTime.Now.ToString("D") // output: Monday, November 08, 2012
string formatteddate=DateTime.Now.ToString("f") // output: Monday, November 08, 2012 3:39 PM
string formatteddate=DateTime.Now.ToString("g") // output: Monday, November 08, 2012 3:39:46 PM
string formatteddate=DateTime.Now.ToString("d") // output: 11/8/2012 3:39 PM
Больше формата даты и времени в asp.net приведено здесь.
http://dateformat.blogspot.in/2012/09/date-time-format-in-c-aspnet.html
Комментарии:
1. Вопросы касаются разбора datetime, а не форматирования выходных данных. Проблема может быть решена с использованием метода перегрузки
DateTime.Parse()
. Укажите правильную информацию о культуре:dateValue = DateTime.Parse(dateString, new CultureInfo("fr-FR", false));
2. Ваши значения 1 и 5 одинаковы, но разные выходные данные,
string formatteddate=DateTime.Now.ToString("d")
. Как это возможно?