入力文字列をフォーマットしたい MM/dd/yyyy hh:mm:ss C#でフォーマットします。
入力文字列の形式は_MM/dd/yyyy hh:mm:ss
_です
たとえば:_"04/30/2013 23:00"
_
Convert.ToDateTime()
関数を試してみましたが、4は日付と見なされ、3は月と見なされます。実際には月は04で、日付は03です。
DateTime.ParseExact()
関数も試しましたが、例外が発生しました。
エラーが発生しています:
文字列は有効なDateTimeとして認識されませんでした。
日付文字列に秒が含まれていません。それをフォーマットに反映する必要があります(:ss
)。
また、24時間を使用している場合は、H
の代わりにh
を指定する必要があります。
DateTime.ParseExact("04/30/2013 23:00", "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture)
詳細については、こちらをご覧ください。
DateTime.ParseExact()
メソッドを使用できます。
指定された形式とカルチャ固有の形式情報を使用して、指定された日付と時刻の文字列表現を、対応するDateTimeに変換します。 文字列表現の形式は、指定された形式と正確に一致する必要があります。
DateTime date = DateTime.ParseExact("04/30/2013 23:00",
"MM/dd/yyyy HH:mm",
CultureInfo.InvariantCulture);
DEMO
です。
hh
は01から12までの12時間制で、HH
は00から23までの24時間制です。
詳細については、 Custom Date and Time Format Strings
これを試して:
string strTime = "04/30/2013 23:00";
DateTime dtTime;
if(DateTime.TryParseExact(strTime, "MM/dd/yyyy HH:mm",
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out dtTime))
{
Console.WriteLine(dtTime);
}
文化を変えて、このように試してみてください
string[] formats= { "MM/dd/yyyy HH:mm" }
var dateTime = DateTime.ParseExact("04/30/2013 23:00",
formats, new CultureInfo("en-US"), DateTimeStyles.None);
詳細の確認: DateTime.ParseExactメソッド(String、String []、IFormatProvider、DateTimeStyles)
これは、文字列が6/15/2019の場合にも問題になる可能性があります。 DateTime Parseは、2019年6月15日を想定しています。
最初にスラッシュで分割します
var dateParts = "6/15/2019"
var month = dateParts[0].PadLeft(2, '0');
var day = dateParts[1].PadLeft(2, '0');
var year = dateParts[2]
var properFormat = month + "/" +day +"/" + year;
これで、DateTime.Parse(properFormat、 "MM/dd/yyyy")を使用できます。それは非常に奇妙ですが、これは私のために働くことだけです。
DateTime dt1 = DateTime.ParseExact([YourDate], "dd-MM-yyyy HH:mm:ss",
CultureInfo.InvariantCulture);
一部のカルチャではスラッシュ以外の区切り文字が使用されるため、hh(12時間制)ではなくHH(24時間制)の使用、およびInvariantCultureの使用に注意してください。
たとえば、カルチャがde-DEの場合、形式「dd/MM/yyyy」では区切り文字としてピリオドが必要になります(2011年1月31日)。
以下のコードは私のために働いた:
string _stDate = Convert.ToDateTime(DateTime.Today.AddMonths(-12)).ToString("MM/dd/yyyy");
String format ="MM/dd/yyyy";
IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);
DateTime _Startdate = DateTime.ParseExact(_stDate, format, culture);
このタイプのフォーマットを使用できます(SQLサーバーからフォーマット済みデータを取得)
FORMAT(convert(datetime、'16/04/2018 10:52:20 '、103)、' dd/MM/yyyy HH:mm:ss '、' en-us ')
CONVERT(VARCHAR、convert(datetime、'16/04/2018 10:52:20 '、103)、120)