Class: Strptime

Inherits:
Object
  • Object
show all
Defined in:
ext/strptime/strptime.c,
lib/strptime.rb,
lib/strptime/version.rb,
ext/strptime/strptime.c

Overview

Strptime is a faster way to parse time strings like strptime(3).

Examples:

parser = Strptime.new('%Y-%m-%dT%H:%M:%S%z')
parser.source #=> "%Y-%m-%dT%H:%M:%S%z"
parser.exec('2015-12-25T12:34:56+09') #=> 2015-12-25 12:34:56 +09:00
parser.execi('2015-12-25T12:34:56+09') #=> 1451014496

Constant Summary collapse

VERSION =
"0.1.0"

Instance Method Summary collapse

Constructor Details

#new(format) ⇒ Object

returns parser object

Parameters:

  • format (String)

    strptime(3) style format string.



636
637
638
639
640
641
642
643
644
645
646
647
648
# File 'ext/strptime/strptime.c', line 636

static VALUE
strptime_init(VALUE self, VALUE fmt)
{
    struct strptime_object *tobj;
    void **isns;
    StringValue(fmt);
    TypedData_Get_Struct(self, struct strptime_object, &strptime_data_type,
			 tobj);
    isns = strptime_compile(RSTRING_PTR(fmt), RSTRING_LEN(fmt));
    tobj->isns = isns;
    tobj->fmt = rb_str_new_frozen(fmt);
    return self;
}

Instance Method Details

#exec(str) ⇒ Time

Parse given string, and return Time object

Parameters:

  • str (String)

    string to parse

Returns:

  • (Time)

    the time object given string means



700
701
702
703
704
705
706
707
708
709
710
711
712
713
# File 'ext/strptime/strptime.c', line 700

static VALUE
strptime_exec(VALUE self, VALUE str)
{
    struct strptime_object *tobj;
    int r, gmtoff = 0;
    StringValue(str);
    GetStrptimeval(self, tobj);
    struct timespec ts;

    r = strptime_exec0(tobj->isns, RSTRING_PTR(tobj->fmt), RSTRING_PTR(str),
		       RSTRING_LEN(str), &ts, &gmtoff);
    if (r) rb_raise(rb_eArgError, "string doesn't match");
    return rbtime_timespec_new(&ts, gmtoff);
}

#execi(str) ⇒ Integer

Parse given string, and return epoch as integer

Parameters:

  • str (String)

    string to parse

Returns:

  • (Integer)

    the Unix epoch given string means



722
723
724
725
726
727
728
729
730
731
732
733
734
735
# File 'ext/strptime/strptime.c', line 722

static VALUE
strptime_execi(VALUE self, VALUE str)
{
    struct strptime_object *tobj;
    struct timespec ts;
    int r, gmtoff = 0;
    StringValue(str);
    GetStrptimeval(self, tobj);

    r = strptime_exec0(tobj->isns, RSTRING_PTR(tobj->fmt), RSTRING_PTR(str),
		       RSTRING_LEN(str), &ts, &gmtoff);
    if (r) rb_raise(rb_eArgError, "string doesn't match");
    return TIMET2NUM(ts.tv_sec);
}

#initialize_copyObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

For Ruby VM internal.



653
654
655
656
657
658
659
660
661
662
663
664
# File 'ext/strptime/strptime.c', line 653

static VALUE
strptime_init_copy(VALUE copy, VALUE self)
{
    struct strptime_object *tobj, *tcopy;

    if (!OBJ_INIT_COPY(copy, self)) return copy;
    GetStrptimeval(self, tobj);
    GetNewStrptimeval(copy, tcopy);
    MEMCPY(tcopy, tobj, struct strptime_object, 1);

    return copy;
}

#sourceString

Returns source format string

Returns:

  • (String)

    source format string



741
742
743
744
745
746
747
748
# File 'ext/strptime/strptime.c', line 741

static VALUE
strptime_source(VALUE self)
{
    struct strptime_object *tobj;
    GetStrptimeval(self, tobj);

    return tobj->fmt;
}