web-dev-qa-db-ja.com

日時形式の問題:文字列が有効な日時として認識されませんでした

入力文字列をフォーマットしたい 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として認識されませんでした。

9
Priya

日付文字列に秒が含まれていません。それをフォーマットに反映する必要があります(:ss)。
また、24時間を使用している場合は、Hの代わりにhを指定する必要があります。

DateTime.ParseExact("04/30/2013 23:00", "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture)

詳細については、こちらをご覧ください。

カスタムの日付と時刻のフォーマット文字列

13
Botz3000

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

5
Soner Gönül

これを試して:

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);
 }
3
Arshad

文化を変えて、このように試してみてください

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)

1
Pranay Rana

これは、文字列が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")を使用できます。それは非常に奇妙ですが、これは私のために働くことだけです。

0
Manjay_TBAG
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日)。

0
Diorrini11

以下のコードは私のために働いた:

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);
0
Anjan Kant

このタイプのフォーマットを使用できます(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)

0
yogesh lodha