2017-03-17 6 views
0

ここでは2017年3月午前6時30分)DateTime.TryParseExactを(使用してYYYYMMDDうーん形式で日付を解析するために失敗

を17を意味し、「20170317 630」 は、コードブロックであるように私は形式に私の日時を取得しています私は試していますが、失敗しています。

var str = "20170317 0630"; 
var formatedTime = "yyyyMMdd Hmm"; 
DateTime etaDate; 
if (!DateTime.TryParseExact(str,formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None, out etaDate)) //formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None 
{ 
    Console.WriteLine("Date conversion failed " + etaDate); 
} 

Console.WriteLine("Date conversion passed "+etaDate); 

のために渡す:20170317 0630

がために失敗:20170317 630

はこれで私を助けてください。

答えて

0
//split str in to strDate and strTime by using space 
    var strDate = "20170317"; //Date part 
    var strTime ="630";  //Time part 
    if(strTime.Length ==3) //check lenght of time part 
    { 
     strTime = "0" + strTime; //Add extra zero 
    } 
    var formatedTime = "yyyyMMdd HHmm"; 
    DateTime etaDate; 
    if (!DateTime.TryParseExact(strDate + strTime,formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None, out etaDate)) //formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None 
    { 
     Console.WriteLine("Date conversion failed " + etaDate); 
    } 

    Console.WriteLine("Date conversion passed "+etaDate); 
-2

で試してみてください。

var str = "20170317 0630"; 
    var formatedTime = "yyyyMMdd HHmm"; 
    DateTime etaDate; 
    if (!DateTime.TryParseExact(str,formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None, out etaDate)) //formatedTime, CultureInfo.InvariantCulture, DateTimeStyles.None 
    { 
     Console.WriteLine("Date conversion failed " + etaDate); 
    } 

    Console.WriteLine("Date conversion passed "+etaDate); 
+0

入力に「0630」ではなく「630」がある場合、これは機能しません。 –

4

私はそれを解析するために失敗しています完全に驚いていないよ - 私はそれが貪欲に「63」を解析すると、無効な時間の数であるようにそれをみなしています疑い。

私たちはexactly the same problem in Noda Timeです。私はそれを修正するつもりはありません。この作業を行うことは、巨大なの努力の量であり、より賢明なフォーマットのためにパフォーマンスをかなり低下させる可能性があります。

より賢明なフォーマットに移行することを強くお勧めします。できれ日付部品のハイフンで、そのyyyy-MM-dd HH:mm

をすることができます - IMO、より良いそれをすべて明確

  • HH:mm作るために、擬似曖昧
  • HHmmを削除する

    • H:mmの1文字列の長さを検出するだけで、あるフォーマットから別のフォーマットに変換することができます。たとえば、あなたが行うことができますHHmmを使用して移動するには:

      if (str.Length == "yyyyMMdd Hmm".Length) 
      { 
          str = str.Insert("yyyyMMdd ".Length, "0"); 
      } 
      

      を次にyyyyMMdd HHmm形式で解析します。長さがの場合、長さがの有効な幅でない場合は、後で解析することができません。

  • +1

    @コードキャスター:いいえ、ちょうど長さに行く - 私の編集を参照してください。 –

    +0

    あなたはもっと速くなると知っているはずです。良いアドバイス – EpicKip

    +0

    はい、サンプル実装を提供したらすぐにコメントを削除しました。無条件に日付の前のすべてが固定長である限り、それは動作します。 :) – CodeCaster

    関連する問題