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
[39384] Re:Re:Re:ascii time을 .. epoch time으로 바꾸려면..
[] 1058 읽음    2005-03-05 22:58
아기곰.. 님이 쓰신 글 :
: tm sturct에 적절한 값을 대입하게 되면 (현재의 값을 string 쪼개서 )
: 어떻게 ... long으로 변환이 되는지요?
:
: long값이 tm 스트럭쳐로 변환되어 되는것은 아래처럼 해서 되는데.....
: tm sturct값을 ... long으로 변환하는 방법이 좀 묘연합니다.
: 분명 될텐데...
:
: 수고하세요.
:

: 님이 쓰신 글 :
: : 아기곰. 님이 쓰신 글 :
: : : time_t t;
: : : struct tm * tblock;
: : : t = time ( NULL );     
: : : tblock = localtime(&t);
: : :      
: : :  ShowMessage ( buf.sprintf( "long = %ld , Local time is: %s", t1, asctime(tblock))  );
: : :  ==>Sun Sep 16 01:03:52 1973
: : : ascii로 표현된 시간을    다시... epoch  time으로 (초로 )컨버전 하려면... 어떻게 해야 하나요?
: : :
: : : 수고하세요.
: :
: : 그러한 기능을 하는 함수를 찾아 보았으나 일거에 해결할 수 있는 함수가 보이질 않네요.
: : TDateTime을 사용할 수도 있겠으나 일일이 형식을 맞추어주기 위해 다른 전역변수들을 건드려야 하므로 차라리 직접 만드는 게 났겠습니다.
: : asctime()의 결과 문자열은 고정된 길이와 형식을 가지고 있습니다.
: : (요일 3자리, 월 3자리, 날짜 2자리, 시분초 8자리, 년도 4자리)
: : 이것을 파싱하여 다시 tm 형식에 대입하는 것은 그리 복잡한 코딩이 필요하지 않을 것입니다.

생각나는 대로 간단히 코딩해보았습니다.
코드가 영 마음에 들지는 않지만 대략 이런 식으로 하면 되겠습니다.

#include<time.h>
#include<stdlib.h>
#include<map>
#include<algorithm>

using namespace std;

typedef map<string,int,less<string> > daymonth_type;
typedef daymonth_type::value_type daymonth_value_type;
daymonth_type Months;
daymonth_type WDays;

void InitializeDayMon(void)
{
static bool DayMonInitialized=false;
if(!DayMonInitialized)
{
  Months.insert(daymonth_value_type("Jan",0));
  Months.insert(daymonth_value_type("Feb",1));
  Months.insert(daymonth_value_type("Mar",2));
  Months.insert(daymonth_value_type("Apr",3));
  Months.insert(daymonth_value_type("May",4));
  Months.insert(daymonth_value_type("Jun",5));
  Months.insert(daymonth_value_type("Jul",6));
  Months.insert(daymonth_value_type("Aug",7));
  Months.insert(daymonth_value_type("Sep",8));
  Months.insert(daymonth_value_type("Oct",9));
  Months.insert(daymonth_value_type("Nov",10));
  Months.insert(daymonth_value_type("Dec",11));

  WDays.insert(daymonth_value_type("Sun",0));
  WDays.insert(daymonth_value_type("Mon",1));
  WDays.insert(daymonth_value_type("Tue",2));
  WDays.insert(daymonth_value_type("Wed",3));
  WDays.insert(daymonth_value_type("Thu",4));
  WDays.insert(daymonth_value_type("Fri",5));
  WDays.insert(daymonth_value_type("Sat",6));

  DayMonInitialized=true;
}
}

enum DateTimeIndices{dtiWDay=0,dtiMonth,dtiMDay,dtiHour,dtiMinutes,dtiSeconds,dtiYear};


struct tm Convert(char *strDateTime) // "Mon Nov 21 11:31:54 1983\n\0";
{
// "ddd mmm d hh:nn:ss yyyy";
// asctime and _wasctime convert a time stored as a structure to a 26 (wide) character string in the following form:

static const int headindices[]={0,4,8,11,14,17,20};
static const int tailindices[]={3,7,10,13,16,19,24};
for(int i=dtiWDay; i<=dtiYear ;++i)
{
  strDateTime[tailindices[i]]='\0';
}
InitializeDayMon();
struct tm dt;
daymonth_type::iterator it;
it = Months.find(strDateTime+headindices[dtiMonth]);
if(it!=Months.end()) dt.tm_mon = it->second;
else throw Exception("Invalid Format");
it = WDays.find(strDateTime+headindices[dtiWDay]);
if(it!=WDays.end()) dt.tm_wday = it->second;
else throw Exception("Invalid Format");
try{
  dt.tm_mday = atoi(strDateTime+headindices[dtiMDay]);
  dt.tm_hour = atoi(strDateTime+headindices[dtiHour]);
  dt.tm_min = atoi(strDateTime+headindices[dtiMinutes]);
  dt.tm_sec = atoi(strDateTime+headindices[dtiSeconds]);
  dt.tm_year = atoi(strDateTime+headindices[dtiYear]) - 1900;
}catch(...){
  throw Exception("Invalid Format");
}
dt.tm_yday=0;
dt.tm_isdst=0;
return dt;
}

+ -

관련 글 리스트
39315 ascii time을 .. epoch time으로 바꾸려면.. 아기곰. 881 2005/02/28
39371     Re:ascii time을 .. epoch time으로 바꾸려면.. 967 2005/03/04
39380         Re:Re:ascii time을 .. epoch time으로 바꾸려면.. 아기곰.. 1672 2005/03/04
39384             Re:Re:Re:ascii time을 .. epoch time으로 바꾸려면.. 1058 2005/03/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.