2017-11-28 13 views
0

Google APIを使用して日付と時刻が設定され、顧客の予定表に予定が設定されています。問題は12時正午の起動時に予定に時間を追加するためです理由は問わず、午前12時の翌日のGoogleカレンダーに表示されます。ここで DateTime翌日の日付を設定する

は、日付と時刻の設定コードです:私がやったところ

// dd is a drop down for hours 1 to 12 Central Time Zone 
int iHour = Convert.ToInt32(dd.SelectedItem.Text); 
// and this is the minutes values of 30 or 45 
int iMinute = Convert.ToInt32(ddMinute.SelectedItem.Text); 
var date = "Nov 19, 2017"; 
DateTime dt = new DateTime(); 
dt = Convert.ToDateTime(date); 

// If its PM set 12 hours more to it because its a 24 hours clock 
if (ddAptAmPm.SelectedValue == "PM") 
    iHour += 12; 

dt = dt.AddHours(iHour); 
dt = dt.AddMinutes(iMinute); 

var startDate = dt; 
var endDate = dt; 

string sNotes = "TestingA PI"; 
string sTitle = "Testas" + " with: " + "ASP.NEt" + " " + "Last Name here"; 


int length = Convert.ToInt32("30"); 
endDate = endDate.AddMinutes(length); 

var google = new GoogleCalendar(); 
int value = google.CreateCalendarEvent("email", startDate, endDate, sNotes, sTitle); 

は、いずれかが見ることができるが、この間違った

+0

時間は1から12までです。 – Ahmad

+0

24時間形式を確認してください。 12を追加するとiHourが発生する可能性があります – active92

+0

なぜハードコーディングされた文字列をintに変換するのですか?int length = Convert.ToInt32( "30"); ' int length = 30; '? –

答えて

1
if (ddAptAmPm.SelectedValue == "PM") // If its PM set 12 hours more to it because its a 24 hours clock 
     iHour += 12; 

次のようになります。

if (ddAptAmPm.SelectedValue == "PM" && iHour < 12) // If its 1-11 PM set 12 hours more to it because its a 24 hours clock 
    iHour += 12; 
else if (ddAptAmPm.SelectedValue == "AM" && iHour == 12) 
    iHour = 0; 

12 + 12は24ですから、今日プラス24時間は翌日です。

それを書くための別の方法:あなたがそれを行うことができ

if (iHour == 12) // 12 is **before** 1 
    iHour = 0; 

if (ddAptAmPm.SelectedValue == "PM") // If its PM set 12 hours more to it because its a 24 hours clock 
    iHour += 12; 
+0

私はあなたが書いた第2の方法が好きです - バットから12から0(軍事的な時間)に変換してください。その後、「iHour」に追加の比較は必要ありません。 –

+0

私はそれを試してみましょう – Ahmad

+0

それはそれが混乱していた理由があったおかげで多くの人! – Ahmad

1

もう一つの方法は、(AMまたはPM指定を含む)特定の形式で日付文字列を構築して、あなたを作成するためにDateTime.ParseExactを使用することですstartDate。このようにして、文字列からintへの変換をすべて行う必要はなく、PMが指定されていれば12時間を追加するなどしてください。

たとえば、このコードでは、現在割り当てられている項目のうち、startDate

// This assumes that ddAptAmPm.SelectedValue will be "AM" or "PM" 
var dateString = string.Format("Nov 19, 2017 {0}:{1} {2}", dd.SelectedItem.Text, 
    ddMinute.SelectedItem.Text, ddAptAmPm.SelectedValue); 

// In a format string, tt is a placeholder for AM/PM 
var startDate = DateTime.ParseExact(dateString, "MMM dd, yyyy h:m tt", 
    CultureInfo.InvariantCulture); 

詳しくは、日付と時刻のフォーマット文字列hereを参照してください。

+0

私はこのことを念頭に置いておいていただきありがとうございます。 – Ahmad

関連する問題