0

実際に日付に変換せずに、日付文字列をある形式から別の形式に変換することは可能ですか?

私はこのようなものが必要です:

string inputDateString = "01/01/2012 23:36:17.234";
string inputFormat = "dd/MM/yyyy HH:mm:ss.fff";

string ouputFormat = "yyyy/MM/dd HH:mm:ss.fff";
string outputDateString = StringDate.Convert(inputDateString,inputFormat, outputFormat);

もちろん、StringDate クラスを記述してフォーマットを解析することもできますが、それは車輪の再発明のように思えます。最初に日付を指定できない理由は、タイムゾーン/サーバー時間に多くの問題があり、これが実行される環境を制御できないためです。日付文字列が再配置されただけで、めちゃくちゃになっていないことを 100% 確信したいだけです!

ありがとう

編集 出力形式は常に同じですが、入力形式は次の任意の組み合わせにすることができます。

時間変化: HH:mm:ss.fff HH:mm:ss HH:mm

日付のバリエーション (もっとあるかもしれません): dd/MM/yyyy dd/MM/yy MM/dd/yyyy MM/dd/yy yyyy/MM/dd yy/MM/dd

4

3 に答える 3

7

最初に絶対に解析する必要があります。解析とフォーマットの方法に注意する必要があります。過去にタイムゾーンに問題があったからといって、解析/フォーマットを回避する必要があるという意味ではありません。つまり、タイムゾーンの観点からやりたいことを考え出す必要があるということです。データをローカルとして扱いたいようです。DateTimeStyles.AssumeLocal不変のカルチャを指定して使用することをお勧めします。

DateTime.ParseExact期待している正確な形式(および特定のカルチャ、おそらく不変のカルチャ)で使用ToStringしてから、出力形式で呼び出し、さらに関連するカルチャを呼び出します。

また、期待するフォーマット文字列が正しくないことにも注意してください。つまり、hhを意味するときに使用しているので、の代わりにHH必要だと思います。サンプルコード:fffmmm

using System;
using System.Globalization;

public class Test
{
    static void Main()
    {
        string inputDateString = "01/01/2012 23:36:17.234";
        string inputFormat = "dd/MM/yyyy HH:mm:ss.fff";        
        string outputFormat = "yyyy/MM/dd HH:mm:ss.fff";

        DateTime parsed = DateTime.ParseExact(inputDateString, inputFormat,
                                              CultureInfo.InvariantCulture,
                                              DateTimeStyles.AssumeLocal);
        string outputDateString = parsed.ToString(outputFormat, 
                                                  CultureInfo.InvariantCulture);
        Console.WriteLine(outputDateString); // Prints 2012/01/01 23:36:17.234
    }
}

また、私のNoda Timeプロジェクトを調べて、LocalDateTimePattern入力と出力のそれぞれに対してを作成し、それらを繰り返し再利用できるようにすることもできます。

于 2012-04-12T11:54:30.317 に答える
0

これはうまくいくはずです:

string inputDateString = "01/01/2012 23:36:17.234";
string inputFormat = "dd/MM/yyyy HH:mm:ss.fff";

string ouputFormat = "yyyy/MM/dd HH:mm:ss.fff";

string outputDateString = DateTime.ParseExact(inputDateString, inputFormat, System.Globalization.CultureInfo.InvariantCulture).ToString(ouputFormat);
于 2012-04-12T11:56:14.127 に答える
-3
string s = System.Convert.ToDateTime(System.Convert.ToDateTime(inputDateString).ToString(inputFormat)).ToString(ouputFormat);
System.Console.Write(s);
于 2012-04-12T11:58:48.157 に答える