2016-12-06 3 views
0

Windows Forms를 통해 C#으로 알람 시계 앱을 만드는 중입니다. 지금까지, 나는 내 시간 검사기를위한 코드의이 작동하지 않는 부분을 가지고있다.C# - 알람 시계 - 두 번 같음

string alarm = this.dateTimePicker1.Text; 

if (DateTime.Now.ToString() == alarm) 
{ 
    MessageBox.Show("Alarm"); 
} 

DateTimePicker는 시간, 분 및 초로 구성됩니다. 위의 코드는 메시지 상자를 전혀 표시하지 않습니다. 스 니펫의 문제는 어디에 있습니까?

기타 : 알람 시계를 만드는 더 효율적인 방법이 있습니까

+0

NineBerry, 더 많은 코드가 필요하지 않습니다. 이 코드는 문제를보기에 충분합니다. – NikxDa

+0

사용자가 시간을 입력 할 때처럼 타이머를 시작할 수 있습니다. http://stackoverflow.com/a/7970754/2608451 –

답변

2

당신이 가야이보십시오.

private void CheckTime() 
{ 
    clock.Text = DateTime.Now.ToString("hh:mm:ss"); 
    date.Text = DateTime.Now.ToLongDateString(); 
    DateTime alarm = this.dateTimePicker1.Value; 
    DateTime currentTime = DateTime.Now; 
    if (alarm.Hour == currentTime.Hour && alarm.Minute == currentTime.Minute) 
    { 
     timer1.Enabled = false; 
     MessageBox.Show("Alarm"); 

    } 
} 
+0

정말 좋았습니다. 타이머를 멈추고 수많은 메시지 상자가 화면을 보호합니다. – EugeneProut

+1

이것은 매우 간결한 대답이지만, 왜 작동하는지에 대한 설명이 없습니다. @ trickrider2002,이 답변은 DateTime.Now가 초를 포함하는 값 (그리고 사용 방법에 따라 밀리 초)을 제공하기 때문에 작동합니다. 두 개의 부동 소수점 값을 비교하는 것과 같습니다. 의미있는 비교가 가능한 값으로 반올림해야합니다. 시간과 분으로 변환하면됩니다. – dviljoen

0

필요에 따라 아래 코드를 수정하십시오. 나는 문자열을 비교하는 것이 빈약 한 방법이라고 생각한다.

DateTime alarm = this.dateTimePicker1.Value.Date; 
if (DateTime.Compare(DateTime.Now.Date, alarm) == 0) { 
    MessageBow.Show("Alarm"); } 
+2

DateTime.Compare를 사용할 때 datetimes가 동일한 시간대에 생성되어야한다는 것을 잊지 마십시오. 문화 및 UICulture 설정에주의하십시오. –

+0

@GeckoIT 매우 사실! 문화 및 UIculture 설정을 지정하는 방법이 있습니다. 나는 그가 필요로하는 정확한 코드를 쓰지 않을 것이지만 그 사람이 알아낼 수있는 방법을 제공 할 것이다 (나는 사람들이 가장 잘 배운 방법이라고 생각한다). 하지만 당신은 좋은 점을 분명히했습니다. – peterpep

+0

나는'> 0'이 아니라'== 0'이 아니라고 생각합니다. – smead

1

자명종이므로 시간을 포함하여 비교하고 싶을 것입니다. 말했다 즉, 당신의 날짜 시간 개체의 .Ticks의 값을 비교 :

if(DateTime.Now.Ticks >= this.DateTimePicker1.Value.Ticks) 
{ 
    // Sound the alarm 
} 

당신이 작품을 사용하고있는 DateTimePicker, 당신은 비교하기 전에 널 (null) 값을 확인해야 할 수 있습니다 방법에 따라.

+0

왜 Ticks를 사용해야하는지 모르겠으니 충분해야합니다 :'DateTime.Now> this.DateTimePicker1.Value' – smead

+0

Ticks는 DateTime 객체의 기본 값입니다. 조금 더 효율적이지만 길은 효과가 있으며 차이는 OP 응용 프로그램에서는 무시할 수 있습니다. – Kevin

0

정확한 일치를 찾는 데 문제가 있습니다. 대신에 알람 시간이 경과했는지 확인해야합니다 (""= "). 또한 문자열 비교는 날짜 시간 동안 작동하지 않습니다. 당신은 날짜/시간을 비교해야 : 시간과 분을 비교하는

필요를 :

 string alarm = this.dateTimePicker1.Value; 
     if (DateTime.Now() >= alarm) 
     { 
      MessageBox.Show("Alarm"); 
     }