1

Im System.datetime.nowは異なるマシンから取得しています.各システムは以下のように異なる日時形式を持っています

16-Oct-12 7:25:22 PM
16/10/2012 7:10:47 PM [DD/MM/YYYY]
10/16/2012 7:10:51 PM [MM/DD/YYYY]

の異なる形式DateTimeを特定の文字列形式に変換する方法は?

string sDateTime = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt"); 
4

4 に答える 4

1

Google 検索の最初の結果: MSDN のカスタム日時書式文字列

日時を返すときに、他のマシンで明示的に提供したコード行を使用する必要があります。

string sDateTime = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt");]

ただし、これはタイムゾーンを認識していません! アプリケーションが複数のタイム ゾーンにまたがる場合は、それも考慮する必要があります。

または、さらに良いことに、マシン間で異なる場合は、Unix 時間 (1970 年 1 月 1 日からのミリ秒) を long として返し、もちろんタイムゾーン情報も返すことができます... (注意してください、.NET expoch 時間はただし、0001-01-01 から!)

エポック時間を返す

  • tryParse を使用しないことをお勧めます:月が 12 より大きい場合にのみ、日付が[DD/MM/YYYY]またはにあるかどうかを確実に判断することはできません...そして、これは不可解なエラーにつながります。[MM/DD/YYYY]私を信じて、そこに行って、それをやった(デバッグ部分)...
于 2012-10-17T06:49:51.913 に答える
0

あなたの例の問題は最後の2つのフォーマット16/10/2012 7:10:47 PM [DD/MM/YYYY]10/16/2012 7:10:51 PM [MM/DD/YYYY]です。値が10/11/2012 7:20:10 PM2012年10月11日または2012年11月10日であることをどのように知ることができますか?

var input = new string []{ "16-Oct-12 7:25:22 PM",
                "16/10/2012 7:10:47 PM",
                "10/16/2012 7:10:51 PM"};

foreach (var date in input)
{
    var result = DateTime.MinValue;

    if (DateTime.TryParse(date, out result))
    {
        Console.WriteLine("Date value: {0}", result);
    }
    else
    {
        Console.WriteLine("Cannot parse value {0}", date);
    }
}

ご覧のとおり、"16/10/2012 7:10:47 PM"解析できませんでした。

于 2012-10-17T07:02:13.390 に答える
0
 if (DateTime.TryParse(DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt"), out result))
                    sDateTime = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt");
                else
                {
                    if (System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern.Equals("dd-MMM-yy")) sDateTime = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt");
                    else sDateTime = DateTime.Now.Month +"/" + DateTime.Now.Day+ "/" + DateTime.Now.Year + " " +  DateTime.Now.ToString("hh:mm:ss tt");
                }
于 2012-10-18T06:12:33.467 に答える
0

Datetime クラスのTryParseメソッドを試す

リンクからの例:

string[] dateStrings = {"05/01/2009 14:57:32.8", "2009-05-01 14:57:32.8", 
                        "2009-05-01T14:57:32.8375298-04:00", 
                        "5/01/2008 14:57:32.80 -07:00", 
                        "1 May 2008 2:57:32.8 PM", "16-05-2009 1:00:32 PM", 
                        "Fri, 15 May 2009 20:10:57 GMT" };
DateTime dateValue;

Console.WriteLine("Attempting to parse strings using {0} culture.", 
                  CultureInfo.CurrentCulture.Name);
foreach (string dateString in dateStrings)
{
   if (DateTime.TryParse(dateString, out dateValue)) 
      Console.WriteLine("  Converted '{0}' to {1} ({2}).", dateString, 
                        dateValue, dateValue.Kind);
   else
      Console.WriteLine("  Unable to parse '{0}'.", dateString);
}

この例では、指定されたすべての文字列の日付に対して機能していないことに注意してください

于 2012-10-17T06:52:28.497 に答える