2013-09-21 3 views
0

나는 시간대 ID = 동부 표준시를가집니다. 나는 나는 다른 작업을해야 할 미국의 현재 시간이 시간 (상영 시간과 종료 시각) 사이에 떨어지면 내가 프로그램을 실행할 때 특정 미국 시간 (EST)다른 시간대의 시간을 비교하는 방법

Example: 
I want to do an operation between 11:00-11:30(as an input from user) 
I stored this time in 2 string 
string StartTime="11:00"; 
String EndTime="11:30"; 

한다고 가정에서 몇 가지 작업을 수행해야 아니요

문자열은 US로 현재 시간이 UStime = "11:25"입니다.

   DateTime timeUtc = DateTime.UtcNow; 

       string strTimeZoneId_Newyork = "Eastern Standard Time"; 
       TimeZoneInfo tZone_Newyork = TimeZoneInfo.FindSystemTimeZoneById(strTimeZoneId_Newyork); 
       DateTime dt_Time_Newyork = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, tZone_Newyork); 
       string strDayOfWeek_Newyork = dt_Time_Newyork.DayOfWeek.ToString(); 
       string strTime_Newyork = dt_Time_Newyork.ToShortTimeString(); 

11:25가 11 : 00-11 : 30 사이에 있는지 비교하고 싶습니다.

: convert to dateTime을 사용하면 시스템 날짜 시간이됩니다. 문자열을 비교하고 싶습니다. 이것이 가능한가? 거기에 다른 대안이 있습니까?

+1

왜 나는 datetime과 비교할 수 없습니까? –

답변

0

정확하게 이해하면 시작 시간과 종료 시간을 EST 시간으로 분석 한 다음 현재 현지 시간을 EST 시간과 비교해야합니다. 샘플 콘솔 앱은 아래 작업을 수행합니다. 포괄적 인 비교를합니다 (시간은> = 시작이고 시간은 < = 끝입니다). 독점적으로 원한다면 쉽게 변경할 수 있습니다. 또한 입력 내용은 군사용 시간으로 분석되므로 현지화 된 12 시간 형식을 지원하려면 입력을 변경해야합니다.

그 고기는 입력을 구문 분석하고 EST (현재 DST 설정 포함)에 상대적인 현재 오프셋을 계산하고 올바른 대상 오프셋에 DateTimeOffset을 구성하는 TryParseTimeAsEst 메서드입니다.

TimeZoneInfo을 검색 할 때 .NET에 현재 DST가 자동으로 반영되지 않습니다. 오프셋은 항상 기본 오프셋 (현재 DST ...에 관계없이 EST의 경우 -5 : 00 ... 현재 -4 : 00 임)입니다. 이를 해결하려면 현재 시간을 UTC로 가져와 GetUtcOffset 메서드를 사용하여 DST가있는 실제 오프셋을 가져와야합니다.

class Program 
{ 
    static void Main(string[] args) 
    { 
     DateTimeOffset startTime, endTime, current = DateTimeOffset.Now; 

     Console.WriteLine("Enter the Start Time (in Eastern Standard Time)"); 

     var inputStartTime = Console.ReadLine(); 

     Console.WriteLine("Enter the End Time (in Eastern Standard Time)"); 

     var inputEndTime = Console.ReadLine(); 


     if (!TryParseTimeAsEst(inputStartTime, out startTime)) 
     { 
      Console.WriteLine("Start time is invalid"); 
      return; 
     } 

     if (!TryParseTimeAsEst(inputEndTime, out endTime)) 
     { 
      Console.WriteLine("End time is invalid"); 
      return; 
     } 

     var currentUtc = current.UtcDateTime; 

     if (startTime.UtcDateTime <= ccurrentUtc && currentUtc <= endTime.UtcDateTime) 
     { 
      Console.WriteLine("{0} is between {1} and {2}", current, startTime, endTime); 
     } 
     else 
     { 
      Console.WriteLine("{0} is NOT between {1} and {2}", current, startTime, endTime); 
     } 

    } 

    static bool TryParseTimeAsEst(string value, out DateTimeOffset time) 
    { 
     var est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
     var today = DateTime.Today; 
     var nowUtc = DateTime.UtcNow; // need this to generate the offset that respects DST 

     try 
     { 
      var t = TimeSpan.Parse(value); // parse the input into time 
      time = new DateTimeOffset(today.Year, today.Month, today.Day, t.Hours, t.Minutes, t.Seconds, est.GetUtcOffset(nowUtc)); // create a datetime with offset that reflects DST 

      return true; 
     } 
     catch 
     { 
      time = DateTimeOffset.MinValue; 
      return false; 
     } 
    } 
} 
관련 문제