sam / do fork watch download tarball
public
Rubygem
Description: DataObjects
Homepage: http://rubyforge.org/projects/dorb
Clone URL: git://github.com/sam/do.git
Add microsecond support for type Time
lostfly (author)
Thu May 22 14:34:51 -0700 2008
commit  b2163b4469e643b839ab7a40dc277c67aefceeb9
tree    8cbff53658a2c1d348e6e812a60de024cd0702d3
parent  43cc998fbb825bc1e05057f36f872c83af5a4d55
...
158
159
160
161
162
163
164
 
 
 
 
 
 
 
 
 
 
165
166
 
167
168
169
...
158
159
160
 
 
 
 
161
162
163
164
165
166
167
168
169
170
171
 
172
173
174
175
0
@@ -158,12 +158,18 @@ static VALUE parse_date(const char *date) {
0
   return rb_funcall(rb_cDate, ID_NEW_DATE, 3, rational, INT2NUM(0), INT2NUM(2299161));
0
 }
0
 
0
-static VALUE parse_time(const char *time) {
0
- int year, month, day, hour, min, sec;
0
-
0
- sscanf(time, "%4d-%2d-%2d %2d:%2d:%2d", &year, &month, &day, &hour, &min, &sec);
0
+static VALUE parse_time(char *date) {
0
+
0
+ int year, month, day, hour, min, sec, usec;
0
+
0
+ if (0 != strchr(date, '.')) {
0
+ sscanf(date, "%4d-%2d-%2d %2d:%2d:%2d.%d", &year, &month, &day, &hour, &min, &sec, &usec);
0
+ } else {
0
+ sscanf(date, "%4d-%2d-%2d %2d:%2d:%2d", &year, &month, &day, &hour, &min, &sec);
0
+ usec = 0;
0
+ }
0
 
0
- return rb_funcall(rb_cTime, ID_UTC, 6, INT2NUM(year), INT2NUM(month), INT2NUM(day), INT2NUM(hour), INT2NUM(min), INT2NUM(sec));
0
+ return rb_funcall(rb_cTime, rb_intern("utc"), 7, INT2NUM(year), INT2NUM(month), INT2NUM(day), INT2NUM(hour), INT2NUM(min), INT2NUM(sec), INT2NUM(usec));
0
 }
0
 
0
 static VALUE parse_date_time(const char *date_time) {
...
199
200
201
202
203
204
205
206
207
208
209
 
 
 
 
 
 
 
 
 
 
 
 
210
211
212
...
199
200
201
 
 
 
 
 
 
 
 
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
0
@@ -199,14 +199,18 @@ static VALUE parse_date_time(const char *date) {
0
   return rb_funcall(rb_cDateTime, ID_NEW_DATE, 3, ajd, offset, INT2NUM(2299161));
0
 }
0
 
0
-static VALUE parse_time(char *date) {
0
- int seconds, h, min, s;
0
- sscanf(date, "%2d:%2d:%2d", &h, &min, &s);
0
-
0
- seconds = h * 3600 + min * 60 + s;
0
- seconds += 6 * 3600; // Epoch begins at 6pm, so this gets our times fixed up
0
-
0
- return rb_funcall(rb_cTime, rb_intern("at"), 1, INT2NUM(seconds));
0
+static VALUE parse_time(char *date) {
0
+
0
+ int year, month, day, hour, min, sec, usec;
0
+
0
+ if (0 != strchr(date, '.')) {
0
+ sscanf(date, "%4d-%2d-%2d %2d:%2d:%2d.%d", &year, &month, &day, &hour, &min, &sec, &usec);
0
+ } else {
0
+ sscanf(date, "%4d-%2d-%2d %2d:%2d:%2d", &year, &month, &day, &hour, &min, &sec);
0
+ usec = 0;
0
+ }
0
+
0
+ return rb_funcall(rb_cTime, rb_intern("utc"), 7, INT2NUM(year), INT2NUM(month), INT2NUM(day), INT2NUM(hour), INT2NUM(min), INT2NUM(sec), INT2NUM(usec));
0
 }
0
 
0
 /* ===== Typecasting Functions ===== */
...
225
226
227
228
 
229
230
231
232
 
 
 
 
 
 
 
 
233
234
235
...
225
226
227
 
228
229
 
 
 
230
231
232
233
234
235
236
237
238
239
240
0
@@ -225,11 +225,16 @@ static VALUE parse_date_time(char *date) {
0
 
0
 static VALUE parse_time(char *date) {
0
 
0
- int year, month, day, hour, min, sec;
0
+ int year, month, day, hour, min, sec, usec;
0
 
0
- sscanf(date, "%4d-%2d-%2d %2d:%2d:%2d", &year, &month, &day, &hour, &min, &sec);
0
-
0
- return rb_funcall(rb_cTime, rb_intern("utc"), 6, INT2NUM(year), INT2NUM(month), INT2NUM(day), INT2NUM(hour), INT2NUM(min), INT2NUM(sec));
0
+ if (0 != strchr(date, '.')) {
0
+ sscanf(date, "%4d-%2d-%2d %2d:%2d:%2d.%d", &year, &month, &day, &hour, &min, &sec, &usec);
0
+ } else {
0
+ sscanf(date, "%4d-%2d-%2d %2d:%2d:%2d", &year, &month, &day, &hour, &min, &sec);
0
+ usec = 0;
0
+ }
0
+
0
+ return rb_funcall(rb_cTime, rb_intern("utc"), 7, INT2NUM(year), INT2NUM(month), INT2NUM(day), INT2NUM(hour), INT2NUM(min), INT2NUM(sec), INT2NUM(usec));
0
 }
0
 
0
 static VALUE ruby_typecast(sqlite3_value *value, char *type, int original_type) {

Comments

    No one has commented yet.