C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[75865] Re:Re:날짜형 변수 문의
30억 [] 1215 읽음    2020-05-20 10:59
빌더님 덕분에 많이 공부하고 있는 사람입니다.

빌더님 답변 내용 보면 학교다닐때 교수님이 강의하시는거 같고, 저는 멀뚱멀뚱 쳐다보는 신입생 일때로 돌아가는거 같습니다.

감사합니다.

빌더(TWx) 님이 쓰신 글 :
: 30억 님이 쓰신 글 :
: : 외산 장비에서 데이터가 날짜형이 아닌 실수형으로 저장이 됩니다.
: : 저장된 실수형은 날짜형으로 변환해서 보여주고 있습니다.
: :
: : 그런데 이 파일에서 출력된 값이 43831.958328입니다.
: : 이 자료를 엑셀에 입력하고, 날짜형식으로 바꾸면 "YYYY-MM-DD HH:MM:SS"
: : "2020-01-01 23:00:00.00"이 됩니다.
: :
: : 그런데 빌더에서 코딩하면
: :
: : TDateTime tmpDateTime ;
: : tmpDateTime = 43831.958328 ;
: : Start_DOY = FormatDateTime ( "YYYY-MM-DD HH:MM:SS", tmpDateTime ) ;
: :
: : "2020-01-01 22:59:59" 가 나오는데,
: :
: : 혹시 미리세컨드에서 반올림 할 수 있는 방법이 있나요?
: :
: : 고수님들의 의견 부탁드립니다.
: :
: : 감사합니다.
:
:
:
:
: 답변:
:
:
: TDateTime은 파스칼 언어로 double 형으로 정의되어 있는 구조이고
: 표준이 아니라 플렛폼 간에 호환성이 없으므로 다른 C++ 컴파일러에서 사용할 수 없고.
:
: 64비트 Int64 타입이 지원되지 않던 초기 버전 델파이 컴파일러의 한계를 피해가기 위한 편법으로
: double 형으로 구현됐던 잔재가 지금 까지 이어져서 사용되고 있는 안좋은 케이스 임.
:
:
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:    TDateTime dt = 43831.958328 ;
: 
:    auto mS = MilliSecondOf(dt);
:    auto delta = (round((double)mS / 1000) * 1000) - mS;
: 
:    Caption = FormatDateTime ( "YYYY-MM-DD HH:MM:SS", IncMilliSecond(dt, delta));
: }
: 
: 

:
: 플렛폼 간의 호환성을 위해선 C++20 지원하는 컴파일러로 std::chrono 를 이용하는 게 정석,
:
:
:
:

+ -

관련 글 리스트
75860 날짜형 변수 문의 30억 1116 2020/05/19
75864     Re:날짜형 변수 문의 빌더(TWx) 1317 2020/05/20
75865         Re:Re:날짜형 변수 문의 30억 1215 2020/05/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.