CTime CSeqDB::GetDate(const string & dbname, ESeqType seqtype) { vector<string> vols; CSeqDB::FindVolumePaths(dbname, seqtype, vols); string fmt = "b d, Y H:m P"; CTime retv; char date[128]; ITERATE(vector<string>, vol, vols) { string fn = *vol + ((seqtype == CSeqDB::eProtein)? ".pin" : ".nin"); ifstream f(fn.c_str(), ios::in|ios::binary); char s[4]; // size of next chunk if (f.is_open()) { f.seekg(8, ios::beg); f.read(s, 4); Uint4 offset = SeqDB_GetStdOrd((Uint4 *) s); f.seekg(offset, ios::cur); f.read(s, 4); offset = SeqDB_GetStdOrd((Uint4 *) s); f.read(date, offset); CTime d(string(date), fmt); if (retv.IsEmpty() || d > retv) { retv = d; } } }
CVariant::CVariant(const CTime& v, EDateTimeFormat fmt) : m_data(0) { switch(fmt) { case eShort: m_data = new CDB_SmallDateTime(v); break; case eLong: m_data = new CDB_DateTime(v); break; default: NCBI_THROW(CVariantException, eVariant, "CVariant::ctor(): unsupported datetime type"); } if (v.IsEmpty()) { SetNull(); } }