1

私はこの方法を持っています:

public static DateTime GetDatetime(string ampm, string hour, string minute)
        {
            int iHour = Convert.ToInt32(hour);
            int iMinute = Convert.ToInt32(minute);

            if (ampm == "PM" && iHour != 12)
                iHour = 12 + iHour;

            DateTime dtTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month,
                DateTime.Now.Day, iHour, iMinute, 0);

            return dtTime;
        }

これは基本的にAM/PMと時と分を受け入れ、DateTimeを提供します。私は次のように入力します

   DateTime startTIme = GetDatetime("AM", "12", "30");

ローカルマシンで午前12時30分に正しく時刻を取得します。ただし、これと同じメソッドをサーバーで実行すると、午後12時30分になります。これは私を狂わせています。誰かが私を助けることができますか?私は何が間違っているのですか?

アップデート:

私の新しい関数は次のとおりです。

public static DateTime GetDatetime(string ampm, string hour, string minute)
        {
            int iHour = Convert.ToInt32(hour);
            int iMinute = Convert.ToInt32(minute);

            if (ampm == "PM" && iHour != 12)
                iHour = 12 + iHour;
            else if (ampm == "AM" && iHour == 12)
                iHour = 0;

            DateTime dtTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month,
                DateTime.Now.Day, iHour, iMinute, 0);

            return dtTime;
        }

これはうまくいくようです。誰かがこのコードで何か問題を見つけることができますか?

4

4 に答える 4

2

次のコマンドで呼び出された場合、関数は常に午後12時30分(正午)を返します。GetDatetime("AM", "12", "30");

エリックが言ったように、あなたが異なる結果を得る理由は、2台のコンピューターが異なる方法で日付を印刷するためかもしれません。

たとえば、私の設定では、結果は次のようになります。

2012-05-03 12:30:00(私のコンピューターの形式では正午30分過ぎ)

米国の設定では、結果は次のようになります。

2012年5月3日12:30:00PM(米国形式の正午30分)

両方のマシンで同じ方法で日付を印刷するには、日付のフォーマットに使用するカルチャ情報を指定できます。

DateTime dateResult = GetDatetime("AM", "12", "30");
string strResult = dateResult.ToString(System.Globalization.CultureInfo.GetCultureInfo("en-US"));

すべてのコンピューターで、strResultの値は次のとおりです。5/3/2012 12:30:00 PM

ただし、最も重要なことは、期待どおりの結果が得られるようにコードを修正する必要があります(午前12時は、正午ではなく深夜である必要があります)。

于 2012-05-03T13:47:00.610 に答える
1

次のように現在の文化を確認してください。

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-us");

異なる文化では、日付は異なる形式で書かれているためです。例(3日かもしれません)=2012年3月5日または2012年5月3日など

http://msdn.microsoft.com/en-us/library/system.threading.thread.currentculture.aspx

于 2012-05-03T13:44:11.667 に答える
1

DateTime.Parse()これを行うには、 (msdn link)(またはTryParse())メソッドを使用するだけです。次のサンプルコードを見てください。

string[] times = new string[] 
{
    "00:00 AM"
    , "01:00 AM"
    , "10:00 AM"
    , "12:00 AM"
    , "00:00 PM"
    , "01:00 PM"
    , "10:00 PM"
    , "12:00 PM"
};

foreach (var time in times)
{
    DateTime date = DateTime.Parse(time);
    Console.WriteLine(date);
}

出力を提供します:

03/05/2012 00:00:00
03/05/2012 01:00:00
03/05/2012 10:00:00
03/05/2012 00:00:00
03/05/2012 12:00:00
03/05/2012 13:00:00
03/05/2012 22:00:00
03/05/2012 12:00:00

あなたの場合は、「hour」:「minutes」+「AM」または「PM」を含む文字列を作成するだけです。次のようなコードでは(入力が無効な場合、Parse()メソッドは例外をスローするか、非常に奇妙な結果をスローします)):

public static DateTime GetDatetime(string ampm, string hour, string minute)
{
    return DateTime.Parse(hour + ":" + minute + " " + ampm);
}
于 2012-05-03T13:45:56.153 に答える
0

お使いのマシンは24時間制を使用するように設定されていません

サーバーはです。

通常の方法でそれを変更すれば、すべてうまくいくでしょう:)

方法:

  1. [スタート]をクリックし、[コントロールパネル]をクリックします。
    1. [日付、時刻、言語、および地域のオプション]をクリックし、[地域と言語のオプション]をクリックします。
    2. 1つ以上の個別の設定を変更するには、[カスタマイズ]をクリックします。
    3. 時間タブに移動し、フォーマットがあります!
于 2012-05-03T13:52:24.613 に答える