⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dt.cpp

📁 简单的ODBC访问接口
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "dt.h"

#include <windows.h>

#include <sstream>
#include <iomanip>
using namespace std;

#include <math.h>
#include <time.h>

const int TDt::FULL       =  1;
const int TDt::EUROPEAN   =  2;
const int TDt::MMDDYYYY   =  3;
const int TDt::MMMDDD     =  4;
const int TDt::DDDW       =  5;
const int TDt::YYYYMMDD   =  6;
const int TDt::CRWFORMULA =  7;
const int TDt::LETTER     =  8;
const int TDt::ODBC       =  9;
const int TDt::MMMYYYY    = 10;
const int TDt::DAY        = 11;
const int TDt::MONTH      = 12;
const int TDt::ORACLE     = 13;
const int TDt::DDMMMYY    = 14;
const int TDt::DD         = 15;
const int TDt::MM         = 16;
const int TDt::YYYY       = 17;
const int TDt::DTH        = 18;
const int TDt::D          = 19;
const int TDt::M          = 20;


int TDt::m_nDisplayFormat = TDt::MMDDYYYY;

// Constructors
TDt::TDt() 
{ // Set to today
   Set();
   SetFormat( TDt::MMDDYYYY );
}

TDt::TDt( long j ) 
{
   Set( j );
   SetFormat( TDt::MMDDYYYY );
}

TDt::TDt( int m, int d, int y ) 
{
   Set( m, d, y );
   SetFormat( TDt::MMDDYYYY );
}

TDt::TDt( const char *lpszDate ) 
{
   Set( lpszDate );
   SetFormat( TDt::MMDDYYYY );
}

TDt::TDt( TDt& dt ) 
{
   Set( dt );
   SetFormat( TDt::MMDDYYYY );
}

//
// Magic conversion routines
//
long TDt::Julian()
{
   return GetJulian( m_month, m_day, m_year );
}

//
// Assignment operators
//
TDt& TDt::operator = ( const TDt& dt ) 
{
   return Set( dt );
}

TDt& TDt::operator = ( const char* p ) 
{
   return Set( p );
}

TDt& TDt::operator = ( long l ) 
{
   return Set( l );
}

//
// Incremental operators
//
TDt& TDt::operator += ( int i ) 
{
   long j = GetJulian( m_month, m_day, m_year );
   j += i;
   GetMDY( m_month, m_day, m_year, j );
   return *this;
}

TDt& TDt::operator -= ( int i ) 
{
   long j = GetJulian( m_month, m_day, m_year );
   j -= i;
   GetMDY( m_month, m_day, m_year, j );
   return *this;
}

TDt& TDt::operator ++() 
{
   long j = GetJulian( m_month, m_day, m_year );
   j++;
   GetMDY( m_month, m_day, m_year, j );
   return *this;
}

TDt TDt::operator ++( int ) 
{
   long j = GetJulian( m_month, m_day, m_year );
   j++;
   GetMDY( m_month, m_day, m_year, j );
   return *this;
}

TDt& TDt::operator --() 
{
   long j = GetJulian( m_month, m_day, m_year );
   j--;
   GetMDY( m_month, m_day, m_year, j );
   return *this;
}

TDt TDt::operator --( int ) 
{
   long j = GetJulian( m_month, m_day, m_year );
   j--;
   GetMDY( m_month, m_day, m_year, j );
   return *this;
}

//
// comparison operators
//
bool operator <( long l, TDt& dt2 ) 
{
   return l < dt2.Julian();
}

bool operator <= ( long l, TDt& dt2 ) 
{
   return( l == dt2.Julian() ) ||( l < dt2.Julian() );
}

bool operator >( long l, TDt& dt2 ) 
{
   return( l > dt2.Julian() );
}

bool operator >= ( long l, TDt& dt2 ) 
{
   return( l == dt2.Julian() ) ||( l > dt2.Julian() );
}

bool operator == ( long l, TDt& dt2 ) 
{
   return l == dt2.Julian();
}

bool operator != ( long l, TDt& dt2 ) 
{
   return l != dt2.Julian();
}

//
// Ostream operations
//
/*
ostream& operator <<( ostream &os, TDt& dt ) 
{
   dt.Format();
   os << dt.m_dsDate;
   return os;
}

ostream& operator <<( ostream &os, const TDt& dt ) 
{
   TDt& ndt = const_cast<TDt&>( dt );
   ndt.Format();
   os << ndt.m_dsDate;
   return os;
}
*/

//
// Format routine
//
const char* TDt::Format( const char* fs )
{
   string s;
   char ach[128];
   tm time;
   memset( &time, 0, sizeof( tm ) );
   time.tm_year = m_year - 1900;
   time.tm_mon  = m_month - 1; // jan==0
   time.tm_mday = m_day;

//#pragma MESSAGE( Add day of week week of year etc to this )

   strftime( ach, sizeof( ach ), fs, &time );
   ach[sizeof( ach )-1] = 0; // insurance
   s = ach;

   // add st nd rd th where appropriate
   // change case also?

   _s = s;
   return _s.c_str();
}

void TDt::Format(  char* ach, int size, int a_nDisplayFormat ) 
{
   string s = Format( a_nDisplayFormat );
   strncpy( ach, s.c_str(), size-1 );
   ach[size-1] = 0; // buffer safety
}

const char* TDt::Format(  int a_nDisplayFormat ) 
{
   //char ach[255];
   string s;
   //
   // this stuff needs to be moved into a resource area( bug )
   //
   static const char *DayName[] = {"Sunday", "Monday",
      "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} ;
   const char *MonthName[] = {"January","February","March","April","May",
      "June","July","August","September","October","November","December"};

   int nDisplayFormat; 
   if ( a_nDisplayFormat == -1 )
      nDisplayFormat = m_nDisplayFormat;
   else
      nDisplayFormat = a_nDisplayFormat;

   switch ( nDisplayFormat ) {
   case TDt::DD:
      {
         ostringstream os;
         os << dec << setfill( '0' ) << setw( 2 ) << setiosflags( ios::right ) << m_day;
         s = os.str();
         //sprintf( ach, "%02d", m_day );
         //s = ach;
      }
      break;

   case TDt::D:
      {
         ostringstream os;
         os << dec << m_day;
         s = os.str();
         //sprintf( ach, "%d", m_day );
         //s = ach;
      }
      break;

   case TDt::MM:
      {
         ostringstream os;
         os << dec << setfill( '0' ) << setw( 2 ) << setiosflags( ios::right ) << m_month;
         s = os.str();
         //sprintf( ach, "%02d", m_month );
         //s = ach;
      }
      break;

   case TDt::M:
      {
         ostringstream os;
         os << dec << m_month;
         s = os.str();
         //sprintf( ach, "%d", m_month );
         //s = ach;
      }
      break;

   case TDt::YYYY:
      {
         ostringstream os;
         os << dec << m_year;
         s = os.str();
         //sprintf( ach, "%04d", m_year );
         //s = ach;
      }
      break;

   case TDt::DTH:
      s = Format( TDt::D );
      s += GetNumberSuffix( m_day );
      break;

   case TDt::DAY:
      if ( ! IsNull() )
         s = DayName[DOW()];
      break;

   case TDt::MONTH:
      if ( ! IsNull() )
         s = MonthName[Month()-1];
      break;

   case TDt::FULL: // Monday, January 2nd, 1998
      if ( ! IsNull() )
      {
         string csSuffix = GetNumberSuffix( Day() );
         string csDayName = DayName[DOW()];
         string csMonthName = MonthName[Month()-1];
         s = csDayName;
         s += ", ";
         s += csMonthName;
         s += " ";
         s += Format( TDt::D );
         s += csSuffix;
         s += ", ";
         s += Format( TDt::YYYY );
      }
      break;

   case TDt::LETTER: // March 23rd, 2001
      if ( ! IsNull() )
      {
         string csSuffix = GetNumberSuffix( Day() );
         string csMonthName = MonthName[Month()-1];
         s += csMonthName;
         s += " ";
         s += Format( TDt::D );
         s += csSuffix;
         s += ", ";
         s += Format( TDt::YYYY );
      }
      break;

   case TDt::EUROPEAN: // 23 March, 2001
      if ( ! IsNull() )
      {   
         string csMonthName = MonthName[Month()-1];
         s += Format( TDt::D );
         s += " ";
         s += csMonthName;
         s += " ";
         s += Format( TDt::YYYY );
      }
      break;

   case TDt::MMMYYYY: // March 1999
      if ( ! IsNull() )
      {
         string csMonthName = MonthName[Month()-1];
         s += csMonthName;
         s += " ";
         s += Format( TDt::YYYY );
      }
      break;
   case TDt::ORACLE: // 02-JUL-2001
      if ( ! IsNull() )
      {
         string csMonthName = MonthName[Month()-1];
         csMonthName.erase( 3, 50 );
         s += Format( TDt::DD );
         s += "-";
         s += csMonthName;
         s += "-";
         s += Format( TDt::YYYY );
      }
      break;

   case TDt::ODBC:
      if ( ! IsNull() )
      {
         ostringstream os;
         os << "{d'";
         os << dec << setfill( '0' ) << setw( 4 ) << setiosflags( ios::right ) << m_year;
         os << "-";
         os << dec << setfill( '0' ) << setw( 2 ) << setiosflags( ios::right ) << m_month;
         os << "-";
         os << dec << setfill( '0' ) << setw( 2 ) << setiosflags( ios::right ) << m_day;
         os << "'}";
         s = os.str();
         //sprintf( ach, "{d'%04d-%02d-%02d'}", m_year, m_month, m_day );
         //s = ach;
      }
      break;

   case TDt::CRWFORMULA:
      if ( ! IsNull() )
      {
         ostringstream os;
         os << "date( ";
         os << dec << setfill( '0' ) << setw( 4 ) << setiosflags( ios::right ) << m_year;
         os << ",";
         os << dec << setfill( '0' ) << setw( 2 ) << setiosflags( ios::right ) << m_month;
         os << ",";
         os << dec << setfill( '0' ) << setw( 2 ) << setiosflags( ios::right ) << m_day;
         os << " )";
         s = os.str();
         //sprintf( ach, "date( %04d,%02d,%02d )", m_year, m_month, m_day );
         //s = ach;
      }
      break;

   case TDt::YYYYMMDD:
      if ( ! IsNull() )
      {
         ostringstream os;
         os << dec << setfill( '0' ) << setw( 4 ) << setiosflags( ios::right ) << m_year;
         os << "-";
         os << dec << setfill( '0' ) << setw( 2 ) << setiosflags( ios::right ) << m_month;
         os << "-";
         os << dec << setfill( '0' ) << setw( 2 ) << setiosflags( ios::right ) << m_day;
         s = os.str();
         //sprintf( ach, "%04d-%02d-%02d", m_year, m_month, m_day );
         //s = ach;
      }
      break;

   case TDt::MMDDYYYY:
      if ( ! IsNull() )
      {
         ostringstream os;
         os << dec << setfill( '0' ) << setw( 2 ) << setiosflags( ios::right ) << m_month;
         os << "-";
         os << dec << setfill( '0' ) << setw( 2 ) << setiosflags( ios::right ) << m_day;
         os << "-";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -