DateTime "널"값
많이 검색했지만 해결책을 찾지 못했습니다. 초기화되지 않은 값 (null에 해당)을 포함 할 수있는 DateTime을 어떻게 처리합니까? DateTime 속성 값이 설정되었거나 설정되지 않은 클래스가 있습니다. 속성 홀더를 DateTime.MinValue로 초기화하여 쉽게 확인할 수 있다고 생각했습니다. 나는 이것이 매우 일반적인 질문이라고 생각합니다. 어떻게합니까?
일반적인 DateTimes의 경우 초기화하지 않으면 DateTime.MinValue
참조 유형이 아닌 값 유형이므로 일치 합니다.
다음과 같이 nullable DateTime을 사용할 수도 있습니다.
DateTime? MyNullableDate;
또는 더 긴 형태 :
Nullable<DateTime> MyNullableDate;
마지막으로 모든 유형의 기본값을 참조하는 내장 된 방법이 있습니다. 이것은 null
참조 유형을 반환 하지만 DateTime 예제에서는 다음과 동일을 반환합니다 DateTime.MinValue
.
default(DateTime)
.NET 2.0 이상을 사용하는 경우 널 입력 가능 유형을 사용할 수 있습니다.
DateTime? dt = null;
또는
Nullable<DateTime> dt = null;
나중에 :
dt = new DateTime();
그리고 당신은 값을 확인할 수 있습니다 :
if (dt.HasValue)
{
// Do something with dt.Value
}
또는 다음과 같이 사용할 수 있습니다.
DateTime dt2 = dt ?? DateTime.MinValue;
자세한 내용은 여기 ( http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx)를 참조하십시오.
날짜 시간? MyDateTime {get; set;}
MyDateTime = (dr["f1"] == DBNull.Value) ? (DateTime?)null : ((DateTime)dr["f1"]);
다음과 같은 방식으로 작동
myClass.PublishDate = toPublish ? DateTime.Now : (DateTime?)null;
PublishDate 속성은 DateTime이어야합니까?
nullable types 사용을 고려할 것 입니다.
DateTime? myDate
대신에 DateTime myDate
.
널 입력 가능 클래스를 사용할 수 있습니다.
DateTime? date = new DateTime?();
이를 위해 널 입력 가능 DateTime을 사용할 수 있습니다.
Nullable<DateTime> myDateTime;
또는 다음과 같이 작성하십시오.
DateTime? myDateTime;
DateTime
변수가 될 수는 없지만 컴파일러 오류없이 null
비교할 수 있음을 지적 할 가치가 있습니다 null
.
DateTime date;
...
if(date == null) // <-- will never be 'true'
...
항상 시간을로 설정했습니다 DateTime.MinValue
. 이 방법으로 NullErrorException이 발생하지 않으며 설정되지 않은 날짜와 비교할 수 있습니다.
DateTime을 Nullable로 설정할 수 있습니다. 기본적으로 DateTime은 널 입력 가능하지 않습니다. 몇 가지 방법으로 Null을 허용 할 수 있습니다. DateTime 유형 뒤에 물음표를 사용합니까? myTime 또는 일반 스타일 Nullable을 사용합니다.
DateTime? nullDate = null;
또는
DateTime? nullDate;
경고-Nullable을 사용할 때 분명히 더 이상 '순수한'날짜 시간 객체가 아니므로 DateTime 멤버에 직접 액세스 할 수 없습니다. 시도하고 설명하겠습니다.
Nullable <>을 사용하면 기본적으로 DateTime을 컨테이너에 넣을 수 있습니다 (일반적으로 감사합니다). 이 컨테이너에는 위에서 언급 한 DateTime 객체에 대한 액세스를 제공하는 호출 할 수있는 자체 속성이 있습니다. 올바른 속성 (이 경우 Nullable.Value)을 사용한 후 표준 DateTime 멤버, 속성 등에 액세스 할 수 있습니다.
이제 DateTime 객체에 액세스하는 가장 좋은 방법에 대한 문제가 해결되었습니다. 몇 가지 방법이 있습니다. 1 번은 FAR이 가장 좋고 2 번은 "dude why"입니다.
Nullable.Value 속성을 사용하면
DateTime date = myNullableObject.Value.ToUniversalTime(); //Works
DateTime date = myNullableObject.ToUniversalTime(); //Not a datetime object, fails
Convert.ToDateTime ()을 사용하여 nullable 객체를 datetime으로 변환
DateTime date = Convert.ToDateTime(myNullableObject).ToUniversalTime(); //works but why...
이 시점에서 답변이 잘 문서화되어 있지만 Nullable의 사용법은 아마도 가치가 있다고 생각합니다. 동의하지 않으면 죄송합니다.
편집 : 세 번째 옵션이 약간 지나치게 구체적이고 대소 문자에 따라 제거되었습니다.
모두가 이미 답변을 주었지만 날짜 시간을 함수에 쉽게 전달할 수있는 방법을 언급하겠습니다.
[오류 : system.datetime을 변환 할 수 없습니까? system.datetime으로]
DateTime? dt = null;
DateTime dte = Convert.ToDateTime(dt);
이제 아무런 문제없이 함수 내부에 dte를 전달할 수 있습니다.
때로는 null을 기대하는 경우 다음과 같이 사용할 수 있습니다.
var orderResults = Repository.GetOrders(id, (DateTime?)model.DateFrom, (DateTime?)model.DateTo)
저장소에서 널 가능 날짜 시간을 사용하십시오.
public Orders[] GetOrders(string id, DateTime? dateFrom, DateTime? dateTo){...}
Throws ArgumentNullException에 대한 단위 테스트를 수행하는 동안 Null을 DateTime의 매개 변수로 제공 해야하는 것과 동일한 문제가 발생했습니다. 내 경우에는 다음 옵션을 사용하여 작동했습니다.
Assert.Throws<ArgumentNullException>(()=>sut.StartingDate = DateTime.Parse(null));
날짜 / 시간 데이터 유형의 특성상 null
값을 포함 할 수 없습니다 ( 예 : 값을 포함해야 함). 공백이거나 아무 것도 포함 할 수 없습니다. 날짜 / 시간 변수를로 표시하면 nullable
널값 만 지정할 수 있습니다. 그래서 당신이 찾고있는 것은 두 가지 중 하나입니다 (더 많을 수도 있지만 두 가지만 생각할 수 있습니다).
값이 없으면 변수에 최소 날짜 / 시간 값을 지정하십시오. 최대 날짜 / 시간 값도 지정할 수 있습니다. 날짜 / 시간 값을 확인할 때 사이트 전체의 일관성을 유지하십시오.
min
또는 사용을 결정max
하고 그것에 충실하십시오.날짜 / 시간 변수를로 표시하십시오
nullable
. 이렇게하면 날짜 / 시간 변수null
가없는 경우 날짜 / 시간 변수를 설정할 수 있습니다 .
예제를 사용하여 첫 번째 요점을 보여 드리겠습니다. DateTime
변수의 유형은 내가로 설정하기 위하여려고하고,이 경우, 값을 필요 null로 설정할 수 없습니다 DateTime
값이없는 경우의 최소 값입니다.
내 시나리오는 BlogPost
수업 이 있다는 것 입니다. 많은 다른 필드 / 속성이 있지만이 예제에서는 두 개만 사용하기로 선택했습니다. DatePublished
게시물이 웹 사이트에 게시되고 날짜 / 시간 값을 포함해야하는 시점입니다. DateModified
게시물이 수정 될 때이므로 값을 포함 할 필요는 없지만 값을 포함 할 수 있습니다.
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
ADO.NET
데이터베이스에서 데이터를 가져 오는 데 사용 ( DateTime.MinValue
값이 없음) :
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
DateModified
필드를로 표시하여 두 번째 포인트를 달성 할 수 있습니다 nullable
. 이제 null
값이 없으면 설정할 수 있습니다 .
public DateTime? DateModified { get; set; }
ADO.NET
데이터베이스에서 데이터를 가져 오는 데 사용하면 위에서 수행 한 방식과 약간 다르게 보입니다 ( null
대신에 할당 DateTime.MinValue
).
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? (DateTime?)null : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
이것이 혼란을 해결하는 데 도움이되기를 바랍니다. 내 답변이 약 8 년 후에 주어진다면 아마도 C # 프로그래머 일 것입니다 :)
참고 URL : https://stackoverflow.com/questions/221732/datetime-null-value
'development' 카테고리의 다른 글
모든 IP 주소에서 MySQL 데이터베이스에 대한 원격 액세스 권한 부여 (0) | 2020.04.01 |
---|---|
jQuery에 속성 추가 (0) | 2020.04.01 |
두 날짜 사이의 일 수를 계산하는 방법은 무엇입니까? (0) | 2020.04.01 |
정규식 : 대소 문자 구분 무시 (0) | 2020.04.01 |
해결 실패 : com.google.firebase : firebase-core : 9.0.0 (0) | 2020.04.01 |