2016-05-30 5 views
0
private string GetSystem() 
{ 
    StringBuilder results = new StringBuilder(); 

    DateTimeFormatter[] basicFormatters = new[] 
    { 
     // Default date formatters 
     new DateTimeFormatter("shortdate"), 

     // Default time formatters 
     new DateTimeFormatter("longtime"), 
    }; 

    DateTime dateandTime = DateTime.Now; 

    foreach (DateTimeFormatter formatter in basicFormatters) 
    { 
     // Format and display date/time. 
     results.Append(formatter.Format(dateandTime)); 
     results.Append(" "); 
    }   
    return results.ToString(); 
} 

dateString = GetSystem(); 
format = "dd-MM-yyyy HH:mm:ss"; 
provider = new CultureInfo("en-IN"); 
try 
{   
    result = DateTime.ParseExact(dateString, format, System.Globalization.CultureInfo.InvariantCulture); 
    Debug.WriteLine("{0} converts to {1}.", dateString, result.ToString()); 
} 
catch (FormatException) 
{ 
    Debug.WriteLine("{0} is not in the correct format.", dateString); 
} 

でのDateTimeに文字列を変換できません。 UWPアプリでは、このコードを実行すると、誰もが私の問題を解決するためのいくつかのアイデアを提案することができますが、私はエラー</p> <blockquote> <p>"String was not recognized as a valid DateTime"</p> </blockquote> <p>を取得していますUWP

+0

エラーが発生したときのdateStringの外観はどうでしたか?おそらく、2月の30日か15月の2日を解析しようとしています。 –

+0

'dateString'とは何ですか?コードをデバッグし、私たちに教えてください。また、コード内で 'provider' _anywhere_を使用していないことに注意してください。 –

+2

彼のdatestringは 'shorttime'文字列、スペース、' longtime'文字列を連結したものです( 'GetSystem'で見ることができます)。明らかに 'ParseExact'はそれを' dd-MM-yyyy HH:mm:ss'の書式文字列で翻訳することはできません。 – Jcl

答えて

1

、デフォルトでは、shortdateまたはlongtimeよう書式テンプレートを使用している間、それは設定時間下&言語に示されているユーザーのデフォルトのグローバルコンテキストを使用します。そして、私のコンピュータでは、それらは以下のように設定されています
enter image description here 私は私の側であなたのGetSystemメソッドを使用するときに、dateString

6‎/‎1‎/‎2016 ‎1:‎44‎:‎43‎ ‎PM 

のようなもので、明らかにこれはformat = "dd-MM-yyyy HH:mm:ss";で解析することはできません。だから私はここで固定カスタムの日付と時刻の形式の文字列を使用することは良い習慣ではないと思う。

dateStringのフォーマットがDateTime.ParseExactメソッドで使用したformatと一致する場合でも、エラー:String was not recognized as a valid DateTimeが表示されます。

DateTimeFormatter.Formatメソッドを使用すると、戻り値にという一部のが表示される可能性があります。したがって、dateString30‎-‎05‎-‎2016 ‎14‎:‎54‎:‎18のように見えますが、実際は30-05-2016 14:54:18ではありません。これを明確に見るために、dateStringをchar配列に変換することができます。

var dateString = new DateTimeFormatter("shortdate").Format(DateTime.Now); 
var array = dateString.ToCharArray(); 
foreach (var item in arry) 
{ 
    Debug.WriteLine(item); 
} 

をそしてchar配列が好きになる:ここでは例えば "shortdate" テンプレートを使用して
enter image description here

をだからあなたの問題を解決するために、私はあなたがThe General Date Long Time ("G") Format Specifierを使用することをお勧めしたいです。

var dateString = DateTime.Now.ToString("G"); 

をそして同じようのDateTimeに文字列を変換します:

The "G" standard format specifier represents a combination of the short date ("d") and long time ("T") patterns, separated by a space.

次のように、この書式指定子を使用することができます

var result = DateTime.Parse(dateString); 

それとも

var result = DateTime.ParseExact(dateString, "G", null); 

ここproviderがあります現在のカルチャに対応するCultureInfoオブジェクトを表すが使用されます。ここで間違った文化を使うと、String was not recognized as a valid DateTimeも例外となります。

あなたがdd-MM-yyyy HH:mm:ssの形式を使用したい場合は、のようないくつかのコードを使用することができます。

var dateString = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss"); 

およびCONVERTはproviderパラメータが重要ではないだけで、このシナリオでは、上記と同じです。

関連する問題

 関連する問題