-
-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathPDIDATETIME32.cs
43 lines (35 loc) · 1.01 KB
/
PDIDATETIME32.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using PDTools.Utils;
namespace PDTools.Structures;
/// <summary>
/// Some other version. Not Julian, Used in GT5/6 game/car parameters
/// </summary>
public struct PDIDATETIME32
{
private uint _timeData;
public PDIDATETIME32(uint timeData)
=> _timeData = timeData;
public void SetDateTime(DateTime date)
{
_timeData = 0U;
if (date.Year > 1970)
_timeData |= (uint)(date.Year - 1970) << 26;
_timeData |= (uint)date.Month << 22;
_timeData |= (uint)date.Day << 17;
_timeData |= (uint)date.Hour << 12;
_timeData |= (uint)date.Minute << 6;
_timeData |= (uint)date.Second;
}
public readonly DateTime GetDateTime()
=> new DateTime(
(int)((_timeData >> 26 & 0x3F) + 1970), // Year
(int)(_timeData >> 22 & 0xF), // Month
(int)(_timeData >> 17 & 0x1F), // Day
(int)(_timeData >> 12 & 0x1F), // Hour
(int)(_timeData >> 6 & 0x3F), // Min
(int)(_timeData & 0x3F)); // Sec
public readonly uint GetRawData()
=> _timeData;
public void SetRawData(uint data)
=> _timeData = data;
}