0

次のコードがあります。

DateTime endTime = new DateTime(01, 01, 01, 00, 00, 00);

endTime = endTime.AddYears(currentYear - 1);
endTime = endTime.AddMonths(currentMonth - 1);
endTime = endTime.AddDays(currentDay - 1);

hourToWaitTo = Convert.ToInt32(txtboxHourToWaitTo.Text);
minuteToWaitTo = Convert.ToInt32(txtboxMinuteToWaitTo.Text);

endTime = endTime.AddHours(hourToWaitTo);
endTime = endTime.AddMinutes(minuteToWaitTo);

しかし、 endTime には何も追加しません

EDIT1:

currentYear、currentMonth、currentDay を次のように設定します。

int currentYear = Convert.ToInt32(DateTime.Now.ToString("yyyy"));  
int currentMonth = Convert.ToInt32(DateTime.Now.ToString("MM")); 
int currentDay = Convert.ToInt32(DateTime.Now.ToString("dd"));

hourToWaitTo と minuteToWaitTo は、ユーザーがテキストボックスで設定します。

ユーザーがコンピューターをシャットダウンする時刻 (例: 12:25) を設定し、シャットダウンまでの残り時間:分:秒を示すカウントダウンも必要です。私はこれをすべて行うことができましたが、上記の endTime の問題を修正できませんでした。

解決:

この問題の解決策は非常に簡単です。

DateTime endTime = new DateTime(currentYear, currentMonth, currentDay, hourToWaitTo, minuteToWaitTo, 0);

以前にこれを実行しようとしましたが、何らかの理由でエラーが発生していました。上記の変数を設定するには、次を使用しました。

int currentYear = Convert.ToInt32(DateTime.Now.ToString("yyyy"));  
int currentMonth = Convert.ToInt32(DateTime.Now.ToString("MM")); 
int currentDay = Convert.ToInt32(DateTime.Now.ToString("dd"));

int minuteToWaitTo = Convert.ToInt32(txtboxMinuteToWaitTo.Text);
int hourToWaitTo = Convert.ToInt32(txtboxHourToWaitTo.Text);

ご協力ありがとうございました。

4

3 に答える 3

1

これはあなたの質問に対する直接の答えではありません-あなたが投稿したコードは大丈夫に見えるので、何か他のことが起こっているに違いありません-しかし、なぜあなたはただ次のようなことをしないのか疑問に思います:

hourToWaitTo = Convert.ToInt32(txtboxHourToWaitTo.Text);
minuteToWaitTo = Convert.ToInt32(txtboxMinuteToWaitTo.Text);

DateTime endTime = new DateTime(currentYear, currentMonth, currentDay, hourToWaitTo, minuteToWaitTo, 0);
于 2013-02-03T22:31:18.137 に答える
1

このようなコードは廃止する必要があります。

int currentYear = Convert.ToInt32(DateTime.Now.ToString("yyyy"));  
int currentMonth = Convert.ToInt32(DateTime.Now.ToString("MM")); 
int currentDay = Convert.ToInt32(DateTime.Now.ToString("dd"));

システムクロックを3回チェックし、部分的な値を引き出し、文字列にシリアル化し、その文字列を解析してから、各部分を使用します。たくさんの仕事が無料です。

本当に必要なのは:

DateTime endTime = DateTime.Today.AddHours(hourToWaitTo)
                                 .AddMinutes(minuteToWaitTo);

作業している日付の種類を考慮する必要があります。コンストラクターを使用してDateTimeを作成する場合、必要な日付の種類を具体的に指定しない限り、.Kindのを取得します。シナリオでは、またはUnspecifiedで取得するローカル日付を使用する方が適切です。DateTime.TodayDateTime.Now

また、ユーザーに現地時間を要求しているが、時間コンポーネントの入力を許可しているため、その時間は無効またはあいまいである可能性があることにも注意してください。これは、夏時間の移行中に発生します。TimeZoneInfo.Local.IsInvalidTime()またはを使用してユーザー入力を検証できますTimeZoneInfo.Local.IsAmbiguousTime()。時間があいまいな場合は、ユーザーに「夏時間の移行前または移行後」と尋ねる必要があります。または同様のもの。

そして最後に、ユーザーが問題のコンピューターと同じタイムゾーンにいない可能性がある場合は、さらに多くの作業を行う必要があります。代わりに使用を検討DateTimeOffsetする必要があります。シャットダウンの意図したオフセットまたはタイムゾーンをキャプチャする必要があります。別のアプローチは、時間をシャットダウンイベントのUTC時間に変換することです。 詳細とベストプラクティスについては、この記事を確認してください。

于 2013-02-04T19:54:15.410 に答える
0
 new DateTime(year,month,day,hour,minute,0)

?

于 2013-02-03T22:28:06.513 に答える