mam ciąg jak ten „10/13/2009 12:00:00 AM”przekonwertować ciąg do formatu daty
jak mogę przekonwertować go do formatu rrrrmmdd użyciu C#
mam ciąg jak ten „10/13/2009 12:00:00 AM”przekonwertować ciąg do formatu daty
jak mogę przekonwertować go do formatu rrrrmmdd użyciu C#
wypracować dwa formaty, które chcesz, a następnie użyć:
DateTime dt = DateTime.ParseExact(input, inputFormat,
CultureInfo.InvariantCulture);
string output = dt.ToString(outputFormat, CultureInfo.InvariantCulture);
Na przykład:
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);
}
}
Jeśli łańcuch jest prawidłowym formacie datetime że. Netto może zrozumieć, wszystko czego potrzebujesz to:
DateTime.Parse(yourString).ToString("yyyyMMdd")
edycja: Wiele rozsądnych formaty datetime są zrozumiałe przez Net bez wyraźnej specyfikacji formatu, ale jeśli ktoś nie jest specyficzne, a następnie trzeba będzie użyć wyraźnego formatu specyficzny.
DateTime.ParseExact(yourString, format,
CultureInfo.InvariantCulture)).ToString("yyyyMMdd")
"C#" nie ma żadnych poprawnych formatów datetime - .NET ma domyślne formaty, które DateTime.Parse zaakceptuje, ale zależą one od kultury systemu. Lepiej być wyraźnym, IMO. –
Edytowane w celu poprawienia, ale Jon, nie będąc jawnym, ma przewagę nad obsługą wszystkich formatów, które .Net rozumie "po wyjęciu z pudełka", że tak powiem ... W zależności od scenariusza/wymagań, powiedziałbym, że każdy technika ma swoje miejsce. –
string s = String.Format("{0:yyyyMMdd}", Convert.ToDateTime("10/13/2009 12:00:00 AM"));
To się nie udaje na moim pudełku - zakładasz, że Convert.ToDateTime obsłuży ten format, co nie będzie miało miejsca w kulturze Wielkiej Brytanii. –
Są bardzo dobre rozwiązania, ale jeśli coś przekazać, że nie pasuje do wzorca będą rzucać wyjątków. Lubię korzystać z klasy SmartDate od CSLA, http://www.lhotka.net/cslanet/download.aspx, sam. Bardzo dobrze radzi sobie z wartościami zerowymi i nieprawidłowymi wartościami. Funkcja TryStringToDate jest gdzie magia dzieje:
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;
}
Należy więc ostatecznie skończyć z czymś takim:
SmartDate dt = new SmartDate(input);
dt.FormatString = outputFormat;
string output = dt.Text;
Console.WriteLine(output);
można spróbować coś takiego:
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");
super, dzięki dla tego – raklos