[C#] DateTime에서 시간을 변경하는 방법?

DateTime변수 “s” 의 시간 만 어떻게 변경할 수 있습니까?

DateTime s = some datetime;



답변

DateTime 값을 변경할 수 없습니다-변경할 수 없습니다. 그러나 새 값을 가지도록 변수를 변경할 수 있습니다. 시간 만 변경하는 가장 쉬운 방법은 관련 시간으로 TimeSpan을 만들고 DateTime.Date 속성을 사용하는 것입니다.

DateTime s = ...;
TimeSpan ts = new TimeSpan(10, 30, 0);
s = s.Date + ts;

s 이제 같은 날짜이지만 오전 10시 30 분입니다.

DateTime양방향으로 “순진한”Gregorian 시간을 나타내는 일광 절약 시간제 전환 을 무시합니다 ( DateTime문서의 설명 섹션 참조 ). 유일한 예외는 .Now.Today:이 이벤트가 발생할 때이를 반영하는 현재 시스템 시간을 검색합니다.

이것은 현재 생산 준비가 된 Noda Time 프로젝트 를 시작하도록 동기를 부여한 것입니다 . 그 ZonedDateTime유형은 “인식”한다 에 연결하여 tz데이터베이스 항목 .


답변

좋아, 내 제안, 확장 방법으로 다이빙하고 있습니다.

public static DateTime ChangeTime(this DateTime dateTime, int hours, int minutes, int seconds, int milliseconds)
{
    return new DateTime(
        dateTime.Year,
        dateTime.Month,
        dateTime.Day,
        hours,
        minutes,
        seconds,
        milliseconds,
        dateTime.Kind);
}

그런 다음 전화 :

DateTime myDate = DateTime.Now.ChangeTime(10,10,10,0);

이 확장 프로그램은 새로운 날짜 개체를 반환하므로이 작업을 수행 할 수 없습니다.

DateTime myDate = DateTime.Now;
myDate.ChangeTime(10,10,10,0);

그러나 당신은 이것을 할 수 있습니다 :

DateTime myDate = DateTime.Now;
myDate = myDate.ChangeTime(10,10,10,0);


답변

s = s.Date.AddHours(x).AddMinutes(y).AddSeconds(z);

이러한 방식으로 원하는 시간에 새로운 시간, 분, 초를 삽입하면서 날짜를 보존 할 수 있습니다.


답변

짧막 한 농담

var date = DateTime.Now.Date.Add(new TimeSpan(4, 30, 0));

오늘 날짜를 4:30:00 시간으로 되돌리려면 DateTime을 바꾸십시오.


답변

DateTime은 변경할 수없는 유형이므로 변경할 수 없습니다 .

그러나 이전 인스턴스를 기반으로 새 DateTime 인스턴스를 만들 수 있습니다. 귀하의 경우 Date 속성이 필요한 것처럼 들리며 시간을 나타내는 TimeSpan을 추가 할 수 있습니다.

이 같은:

var newDt = s.Date + TimeSpan.FromHours(2);


답변

다른 DateTime객체 에 이미 시간이 저장되어 있으면이 Add방법을 사용할 수 있습니다 .

DateTime dateToUse = DateTime.Now();
DateTime timeToUse = new DateTime(2012, 2, 4, 10, 15, 30); //10:15:30 AM

DateTime dateWithRightTime = dateToUse.Date.Add(timeToUse.TimeOfDay);

TimeOfDay속성은 TimeSpan객체이며 Add메서드에 전달 될 수 있습니다 . 그리고 우리 DatedateToUse변수 의 속성을 사용하기 때문에 날짜를 얻고 시간 범위를 추가합니다.


답변

가장 간단한 해결책 :

DateTime s = //some Datetime that you want to change time for 8:36:44 ;
s = new DateTime(s.Year, s.Month, s.Day, 8, 36, 44);

그리고 특정 날짜 및 시간 형식이 필요한 경우 :

s = new DateTime(s.Year, s.Month, s.Day, 8, 36, 44).ToString("yyyy-MM-dd h:mm:ss");