У меня есть строка, как этот «10/13/2009 12:00:00 AM»преобразовать строку в формате даты
как я могу преобразовать его в формат YYyyMmDd с помощью C#
У меня есть строка, как этот «10/13/2009 12:00:00 AM»преобразовать строку в формате даты
как я могу преобразовать его в формат YYyyMmDd с помощью C#
Отработать два формата, которые вы хотите, а затем использовать:
DateTime dt = DateTime.ParseExact(input, inputFormat,
CultureInfo.InvariantCulture);
string output = dt.ToString(outputFormat, CultureInfo.InvariantCulture);
Например:
using System;
using System.Globalization;
class Test
{
static void Main(string[] args)
{
string input = "10/13/2009 12:00:00 AM";
string inputFormat = "MM/dd/yyyy HH:mm:ss tt";
string outputFormat = "yyyyMMdd";
DateTime dt = DateTime.ParseExact(input, inputFormat,
CultureInfo.InvariantCulture);
string output = dt.ToString(outputFormat, CultureInfo.InvariantCulture);
Console.WriteLine(output);
}
}
Если строка является действительным DateTime формат, который. Net может понять, все, что вам нужно:
DateTime.Parse(yourString).ToString("yyyyMMdd")
Редакция: Многие разумные форматы DateTime понятны .Net без явной спецификации формата, но если ваш конкретный один не является, то вам нужно будет использовать явный формат спецификатор.
DateTime.ParseExact(yourString, format,
CultureInfo.InvariantCulture)).ToString("yyyyMMdd")
«C#» не имеет допустимых форматов даты и времени. В .NET есть стандартные форматы, которые DateTime.Parse будет принимать, но они зависят от культуры системы. Лучше быть явным, ИМО. –
Отредактировано для исправления, но Джон, не будучи явным, имеет преимущество в возможности обрабатывать ВСЕ форматы, которые .Net понимает «из коробки», так сказать ... В зависимости от сценария/требований я бы сказал, что каждый техника имеет свое место. –
string s = String.Format("{0:yyyyMMdd}", Convert.ToDateTime("10/13/2009 12:00:00 AM"));
Это не работает на моем ящике - вы предполагаете, что Convert.ToDateTime будет обрабатывать этот формат, которого он не будет в британской культуре. –
Это очень хорошие решения, но если вы что-то передать, что не соответствует шаблону, они будут бросать исключения. Мне нравится использовать класс SmartDate от CSLA, http://www.lhotka.net/cslanet/download.aspx, сам. Он отлично справляется с нулями и недопустимыми значениями. Функция TryStringToDate где происходит волшебство:
private static bool TryStringToDate(string value, EmptyValue emptyValue, ref DateTime result)
{
DateTime tmp;
if(String.IsNullOrEmpty(value))
{
if(emptyValue == EmptyValue.MinDate)
{
result = DateTime.MinValue;
return true;
}
result = DateTime.MaxValue;
return true;
}
if(DateTime.TryParse(value, out tmp))
{
result = tmp;
return true;
}
string ldate = value.Trim().ToLower();
if(ldate == "SmartDateT" ||
ldate == "SmartDateToday" ||
ldate == ".")
{
result = DateTime.Now;
return true;
}
if(ldate == "SmartDateY" ||
ldate == "SmartDateYesterday" ||
ldate == "-")
{
result = DateTime.Now.AddDays(-1);
return true;
}
if(ldate == "SmartDateTom" ||
ldate == "SmartDateTomorrow" ||
ldate == "+")
{
result = DateTime.Now.AddDays(1);
return true;
}
return false;
}
Таким образом, вы должны в конечном итоге ветер с чем-то вроде этого:
SmartDate dt = new SmartDate(input);
dt.FormatString = outputFormat;
string output = dt.Text;
Console.WriteLine(output);
Вы могли бы попробовать что-то вроде этого:
string myDate = "10/13/2009 12:00:00 AM";
DateTime result = new DateTime(DateTime.Now.Year, 1, 1);
DateTime.TryParse(myDate, out result);
string output = result.ToString("yyyyMMdd");
большой, спасибо для этого – raklos