2017-11-28 24 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 길이 = 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

내가 쓴 두 번째 방법처럼 - 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