Created
September 28, 2016 08:41
-
-
Save vojto/902ca64639336aecc3f95b02faeb064b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public static Int64 GetTimeStamp( | |
| int year, int month, int day, | |
| int hour, int minute, int second, int milliseconds) | |
| { | |
| Int64 timestamp = DateToTicks(year, month, day) | |
| + TimeToTicks(hour, minute, second); | |
| return timestamp + milliseconds * TicksInMillisecond; | |
| } | |
| static readonly int[] DaysToMonth365 = | |
| new int[] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; | |
| static readonly int[] DaysToMonth366 = | |
| new int[] { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }; | |
| const long TicksInSecond = TicksInMillisecond * 1000L; | |
| const long TicksInMillisecond = 10000L; | |
| public static bool IsLeapYear(int year) | |
| { | |
| if ((year < 1) || (year > 9999)) | |
| throw new ArgumentOutOfRangeException("year", "Bad year."); | |
| if ((year % 4) != 0) | |
| return false; | |
| if ((year % 100) == 0) | |
| return ((year % 400) == 0); | |
| return true; | |
| } | |
| private static long DateToTicks(int year, int month, int day) | |
| { | |
| if (((year >= 1) && (year <= 9999)) && ((month >= 1) && (month <= 12))) | |
| { | |
| int[] daysToMonth = IsLeapYear(year) ? DaysToMonth366 : DaysToMonth365; | |
| if ((day >= 1) && (day <= (daysToMonth[month] - daysToMonth[month - 1]))) | |
| { | |
| int previousYear = year - 1; | |
| int daysInPreviousYears = ((((previousYear * 365) + (previousYear / 4)) - (previousYear / 100)) + (previousYear / 400)); | |
| int totalDays = ((daysInPreviousYears + daysToMonth[month - 1]) + day) - 1; | |
| return (totalDays * 0xc92a69c000L); | |
| } | |
| } | |
| throw new ArgumentOutOfRangeException(); | |
| } | |
| private static long TimeToTicks(int hour, int minute, int second) | |
| { | |
| long totalSeconds = ((hour * 3600L) + (minute * 60L)) + second; | |
| if ((totalSeconds > 0xd6bf94d5e5L) || (totalSeconds < -922337203685L)) | |
| throw new ArgumentOutOfRangeException(); | |
| return (totalSeconds * TicksInSecond); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment