|
아기곰.. 님이 쓰신 글 :
: 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;
}
|