16

私のアプリは文字列データを解析し、日付を抽出して日付の形式を識別し、yyyy-MM-dd に変換します。

ソースの日付は、dd-mm-yyyy、dd/mm/yyyy、mm-dd-yyyy、mm/dd/yyyy、または yyyy-MM-dd のいずれかになります。

スイッチケースを使用してさまざまな順列と組み合わせを試す以外に、それを行う効率的な方法はありますか?

string sourceDate = "31-08-2012";
String.Format("{0:yyyy-MM-dd}", sourceDate);

上記のコードは、同じ sourceDate "31-08-2012" を返すだけです。

4

11 に答える 11

17
string DateString = "11/12/2009";
IFormatProvider culture = new CultureInfo("en-US", true); 
DateTime dateVal = DateTime.ParseExact(DateString, "yyyy-MM-dd", culture);

これらのリンクも役立つかもしれません

DateTime.ToString() パターン

DateTime の文字列形式 [C#]

于 2012-09-04T05:57:43.327 に答える
14

文字列をに変換してからDateTime使用しますDateTime.ToString("yyyy-MM-dd");

DateTime temp = DateTime.ParseExact(sourceDate, "dd-MM-yyyy", CultureInfo.InvariantCulture);
string str = temp.ToString("yyyy-MM-dd");
于 2012-09-04T05:52:29.583 に答える
6
string sourceDateText = "31-08-2012";
DateTime sourceDate = DateTime.Parse(sourceDateText, "dd-MM-yyyy")
string formatted = sourceDate.ToString("yyyy-MM-dd");
于 2012-09-04T05:53:54.183 に答える
1

入力を DateTime オブジェクトに解析してから、必要なテキスト形式に変換する必要があります。

取得する形式がわからない場合は、検証または datetimePicker、またはその他のコンポーネントを使用して、ユーザーを固定形式に制限できます。

于 2012-09-04T05:54:03.403 に答える
1

これがあなたの主な問題です:

ソースの日付は、dd-mm-yyyy、dd/mm/yyyy、mm-dd-yyyy、mm/dd/yyyy、さらには yyyy-MM-dd のようなものです。

が与えられた場合01/02/2013、それは 1 月 2 日ですか、それとも 2 月 1 日ですか? 最初にこの問題を解決する必要があります。そうすれば、入力の解析がはるかに簡単になります。

一歩下がって、解決しようとしていることをより詳細に調べることをお勧めします。

于 2012-09-04T06:02:53.730 に答える
1

可能な日付形式を配列に記述し、次のように日付を解析できます。

public static void Main(string[] args)
        {
            string dd = "12/31/2015"; //or 31/12/2015
            DateTime startDate;
            string[] formats = { "dd/MM/yyyy", "dd/M/yyyy", "d/M/yyyy", "d/MM/yyyy",
                                "dd/MM/yy", "dd/M/yy", "d/M/yy", "d/MM/yy", "MM/dd/yyyy"};
            
            DateTime.TryParseExact(dd, formats, 
            System.Globalization.CultureInfo.InvariantCulture,
            System.Globalization.DateTimeStyles.None, out startDate);
                
            Console.WriteLine(startDate.ToString("yyyy-MM-dd"));
            
        }
于 2020-08-27T12:15:28.330 に答える