72 message_out(
ERROR,
"ofxdate_to_time_t(): Unable to convert time, string is 0 length!");
75 std::string ofxdate_whole =
76 ofxdate.substr(0, ofxdate.find_first_not_of(
"0123456789"));
78 if (ofxdate_whole.size() < 8)
80 message_out(
ERROR,
"ofxdate_to_time_t(): Unable to convert time, string " + ofxdate +
" is not in proper YYYYMMDDHHMMSS.XXX[gmt offset:tz name] format!");
81 return std::time(NULL);
85 memset(&time, 0,
sizeof(tm));
86 time.tm_year = atoi(ofxdate_whole.substr(0, 4).c_str()) - 1900;
87 time.tm_mon = atoi(ofxdate_whole.substr(4, 2).c_str()) - 1;
88 time.tm_mday = atoi(ofxdate_whole.substr(6, 2).c_str());
90 if (ofxdate_whole.size() < 14)
92 message_out(
WARNING,
"ofxdate_to_time_t(): Successfully parsed date part, but unable to parse time part of string " + ofxdate_whole +
". It is not in proper YYYYMMDDHHMMSS.XXX[gmt offset:tz name] format!");
96 time.tm_hour = atoi(ofxdate_whole.substr(8, 2).c_str());
97 time.tm_min = atoi(ofxdate_whole.substr(10, 2).c_str());
98 time.tm_sec = atoi(ofxdate_whole.substr(12, 2).c_str());
101 if (time.tm_hour + time.tm_min + time.tm_sec == 0)
106 return timegm(&time);
109 std::string::size_type startidx = ofxdate.find(
"[");
110 if (startidx != std::string::npos)
113 std::string::size_type endidx = ofxdate.find(
":", startidx) - 1;
114 std::string offset_str = ofxdate.substr(startidx, (endidx - startidx) + 1);
115 float ofx_gmt_offset = atof(offset_str.c_str());
116 std::time_t temptime = std::time(
nullptr);
117 static const double secs_per_hour = 3600.0;
118 time.tm_sec -=
static_cast<int>(ofx_gmt_offset * secs_per_hour);
119 return timegm(&time);
123 return timegm(&time);
133 std::string::size_type idx;
134 std::string tmp = ofxamount;
137 if (idx == std::string::npos)
142 if (idx != std::string::npos)
144 tmp.replace(idx, 1, 1, ((localeconv())->decimal_point)[0]);
147 return atof(tmp.c_str());
157 std::string temp_string = para_string;
158 if (temp_string.empty())
161 const char *whitespace =
" \b\f\n\r\t\v";
162 const char *abnormal_whitespace =
"\b\f\n\r\t\v";
166 i <= temp_string.size()
167 && temp_string.find_first_of(whitespace, i) == i
168 && temp_string.find_first_of(whitespace, i) != std::string::npos;
170 temp_string.erase(0, i);
172 for (i = temp_string.size() - 1;
174 && (temp_string.find_last_of(whitespace, i) == i)
175 && (temp_string.find_last_of(whitespace, i) != std::string::npos);
177 temp_string.erase(i + 1, temp_string.size() - (i + 1));
179 while ((index = temp_string.find_first_of(abnormal_whitespace)) != std::string::npos)
181 temp_string.erase(index, 1);