현재시간
long second= System.DateTime.Now.Ticks / 10000000 % 60;
long minute= System.DateTime.Now.Ticks / 10000000/60 % 60;
long hour= System.DateTime.Now.Ticks / 10000000/60/60 % 24;
System.DateTime.NowGetHour(System.DateTime.Now) //24시는 0으로 표기되고 23시는 23시로 나온다
DateTime Date = DateTime.UtcNow.AddYears(-10) //10년전
System.DateTime.Now
//결과:2021-06-08 PM 6:00:44
//Unix시간, 유닉스 타임 스탬프 (UnixTimeStamp)
//DateTime버전 길지만 변환이 쉬움
DateTime date=DateTime.Now;
(Int32)(date.Subtract(new DateTime(1970, 1, 1))).TotalSeconds
//결과: 2021-1-16 (6:12:31 GMT) => 1610788351
//역변환
DateTime date= new DateTime(1970, 1, 1).AddSeconds(unixTime);
//결과: 2021-1-16 (6:12:31 GMT) => 1610788351
//DateTimeOffset버전 짧지만 변환이 어려움
DateTimeOffset.Now.ToUnixTimeSeconds();
var time = System.DateTime.Now;
Debug.Log($"<b>[{time.Hour.ToString("D2")}:{time.Minute.ToString("D2")}:{time.Second.ToString("D2")}.{time.Millisecond.ToString("D3")}]</b>");
//굵은 글씨로 현재시간 시분초(소숫점 포함) 표기
//결과 : [18:17:30.428]
ticks를 datetime으로
long ticks = System.DateTime.UtcNow.Ticks;
System.DateTime dateTime = new System.DateTime(ticks);
Debug.Log(dateTime);
dateTime to int
기준일로부터 68년간 유효하다 (최대 69년)
//68년간 유효
long offsetYears = System.DateTime.MinValue.AddYears(1953).Ticks;
Debug.Log($"offsetYears: {offsetYears}");
long ticks = System.DateTime.Now.Ticks;
Debug.Log($"ticks: {ticks}");
int ticksInt = (int)((ticks- offsetYears)/ 10000000);
Debug.Log($"ticksInt: {ticksInt}");
long intToTicks = (long)ticksInt * 10000000+ offsetYears;
Debug.Log($"intToTicks: {intToTicks}");
System.DateTime dateTime = new System.DateTime(intToTicks);
Debug.Log($"dateTime: {dateTime}");
datetime 문자열 변환
var dateTimeString = dateTime.ToString();
dateTime= System.DateTime.Parse(dateTimeString);
DateTime To TimeSpan
원문 : https://stackoverflow.com/questions/17959440/convert-datetime-to-timespan
var timeSpan = System.TimeSpan.FromTicks(dateTime.Ticks);
DateTime To TotalDays
var timeSpan = System.TimeSpan.FromTicks(dateTime.Ticks);
var totalDays = timeSpan.TotalDays;
DateTime 덧셈
dateTime = dateTime.AddTicks(dateTime2.Ticks);
DateTime을 0~1 float로 변환
//오래될수록 1에 가까워짐
//샘플코드는 최대 한달
//7일전 = 0.2258064
//15일전 = 0.483871
//31일전 = 1
var lastUtcTime = System.DateTime.UtcNow.AddDays(-7); //7일전 접속
long min = System.DateTime.MinValue.Ticks;
long max = System.DateTime.MinValue.AddMonths(1).Ticks; //최대 1달
long normalizeTime = System.Math.Max((System.DateTime.UtcNow - lastUtcTime).Ticks, min);
normalizeTime = System.Math.Min(normalizeTime, max);
Debug.Log("마지막 접속으로부터 {(float)(((double)normalizeTime) / max)}개월 지남");
한달중 얼마나 지나갔는지 0~1float로 변환
단 day 기준임
v1
더보기
float CalculateDayRatioOfMonth(System.DateTime datetime)
{
var datetimeAddMonths1 = datetime.AddMonths(1);
var dayMax = datetimeAddMonths1.AddDays(-datetimeAddMonths1.Day).Day;
return datetime.Day / dayMax;
}
v2
float GetDayRatioOfMonth(System.DateTime datetime)
{
return datetime.Day / (float)System.DateTime.DaysInMonth(datetime.Year, datetime.Month);
}
날짜부분만 추출
v1
var date=System.DateTime.Parse(krTime.ToShortDateString());
v2
var date = krTime.Date;
DateTime의 Lerp
ChatGPT가 짜줬다
System.DateTime LerpDateTime(System.DateTime start, System.DateTime end, float t)
{
var ticksStart = start.Ticks;
var ticksEnd = end.Ticks;
var ticksLerp = (long)(ticksStart + (ticksEnd - ticksStart) * (double)t);
return new System.DateTime(ticksLerp);
}
한국시간 반환
var krTime = System.DateTime.UtcNow.AddHours(9);
일몰일출시간 반환
한국기준이고 2022년 기준으로 만들었다