>
<시간>

매 시간마다 매일 상을주는 기능을 만들려고합니다.

그러므로 DateTime에 몇 시간/일이 걸 렸는지 확인하는 함수를 구현하고 싶습니다.

매초마다 그 함수를 호출 할 코 루틴이 있습니다.

예를 들어 00:00:00, 01:00:00 ... 12:00:00 ... 23:00:00마다 상을 수여하고 싶습니다

<시간>

예 :

DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);
DateTime date1 = new DateTime(2018, 8, 9, 21, 0, 0);
int hoursPassed = (int) date1.Subtract(date0).TotalHours;
Debug.Log("Hours "+ hoursPassed);

<시간> 이 경우 hoursPassed는 0과 같습니다. 대신 1을 검색하는 함수 (이미 존재할 수 있음)를 만들고 싶습니다. 요일도 마찬가지입니다.

<시간>

예제 2

DateTime date0 = new DateTime(2018, 8, 9, 23, 59, 59);
    DateTime date1 = new DateTime(2018, 8, 10, 00, 00, 00);
    int DaysPassed = (int) date1.Subtract(date0).TotalDays;
    Debug.Log("Days "+ DaysPassed);

<시간>

0을 검색하고 1을 검색하려고합니다.

<시간>

여러 시간/일이 지났을 때도이 기능을 사용하고 싶습니다.

<시간>

아무도 도와 줄 수 있나요?

감사합니다


  • 답변 # 1

    가장 쉬운 방법은잘라 내기 DateTime 를 만드는 것입니다  시간에만 관심이있는 경우 분/초를 제거하고 일에만 관심이있는 경우 시간/분/초를 트리밍하여 변수를 변경할 수 있습니다. 그런 다음 시간 또는 일의 차이를 계산하십시오.

    // Calculates the number of hour strikes between the two given times
    public static int HourStrikesBetween(DateTime from, DateTime to)
    {
        if(from > to)
        {
            throw new ArgumentException("from must not be after to");
        }
        // Trim to hours
        DateTime fromTrimmed = new DateTime(from.Year, from.Month, from.Day, from.Hour, 0, 0);
        DateTime toTrimmed = new DateTime(to.Year, to.Month, to.Day, to.Hour, 0, 0);
        int hours = (int)(toTrimmed - fromTrimmed).TotalHours;
        return hours;
    }
    // Calculates the number of midnights between the two given times
    public static int MidnightsBetween(DateTime from, DateTime to)
    {
        if (from > to)
        {
            throw new ArgumentException("from must not be after to");
        }
        // Trim to days
        DateTime fromTrimmed = new DateTime(from.Year, from.Month, from.Day);
        DateTime toTrimmed = new DateTime(to.Year, to.Month, to.Day);
        int days = (toTrimmed - fromTrimmed).Days;
        return days;
    }
    
    

    샘플 :

    DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);
    DateTime date1 = new DateTime(2018, 8, 9, 21, 0, 0);
    int hourspassed = HourStrikesBetween(date0, date1);  // = 1
    date0 = new DateTime(2018, 8, 9, 20, 00, 00);
    date1 = new DateTime(2018, 8, 9, 21, 50, 0);
    hourspassed = HourStrikesBetween(date0, date1);  // = still 1
    date0 = new DateTime(2018, 8, 9, 20, 59, 59);
    date1 = new DateTime(2018, 8, 9, 22, 10, 0);
    hourspassed = HourStrikesBetween(date0, date1);  // = 2
    
    date0 = new DateTime(2018, 8, 9, 23, 59, 59);
    date1 = new DateTime(2018, 8, 10, 00, 00, 00);
    int daysPassed = MidnightsBetween(date0, date1);  // = 1
    
    

    로컬 DateTime 대신 UTC DateTime을 일관되게 사용하는 경우 Dayligth 절약 시간 경계를 넘을 때만 작동합니다.

  • 답변 # 2

    잘 이해하면 :

    private static int GetHours(DateTime date1, DateTime date2)
    {
        return Math.Max(0, Convert.ToInt32((date1 - date2).TotalMinutes / 60 + ((date1 - date2).TotalMinutes % 60 > 0 ? 1 : 0)));
    }
    
    

    사용법 :

       DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);
        DateTime date1 = new DateTime(2018, 8, 9, 21, 0, 0);                        
        Console.Write(GetHours(date1, date0).ToString());
    
    

    1을 반환

    하루 이상 스패닝 :

       DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);
        DateTime date1 = new DateTime(2018, 8, 10, 21, 0, 0);                       
        Console.Write(GetHours(date1, date0).ToString());
    
    

    25를 돌려 준다

  • 답변 # 3

    그것이 Math.Ceiling 인 것 같다  이 작업을 수행하는 가장 쉬운 방법입니다 :

    예 :

    DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);
    DateTime date1 = new DateTime(2018, 8, 9, 21, 0, 0);
    int hoursPassed = (int)Math.Ceiling(date1.Subtract(date0).TotalHours);
    Console.WriteLine("Hours " + hoursPassed);
    
    

    예 2 :

    DateTime date0 = new DateTime(2018, 8, 9, 23, 59, 59);
    DateTime date1 = new DateTime(2018, 8, 10, 00, 00, 00);
    int DaysPassed = (int)Math.Ceiling(date1.Subtract(date0).TotalDays);
    Console.WriteLine("Days "+ DaysPassed);
    
    

  • 이전 arrays - 반복하는 동안 제거하지 않고 CurrentModificationException이 발생하는 이유는 무엇입니까?
  • 다음 sql server - 상위 3 개 범주에서 상위 3 개 항목 선택