Perrin Harkins wrote:
>I tried making a Strptime object with pattern '%I %p' but that seems
>to just return undef when I try to parse these times.

%I only does the hour.  You'd need "%I:%M %p" to parse the string you
gave.  If the input is from a human, though, DT::F::Natural might be a
better choice: you don't have to tell it what the format is.

>                                                       It looks like
>maybe I want a DateTime::Incomplete,

You could use one to represent the time-of-day on its own, and that class
then provides a method to merge it with the date to make a complete
DateTime.  You don't win much from this.  I think it's only useful if
the parts you're merging don't always have the same boundary.  Say, if
you sometimes want to include the day-of-month in your time-of-day string.

>                                     but it's not clear how to make
>one from a string.

Yes.  DT::F::Strptime is logically an appropriate tool for this,
but it doesn't actually provide output in DT::Incomplete form.
Likewise DT::F::Natural.

>                    And it also looks like maybe I want a
>DateTime::Duration since I want to add it to my DT object,

No.  That would be appropriate if you were starting from a base time
and adding on a duration (such as 10 hours and 30 minutes).  That's not
what you're doing.  You're constructing the representation of a point
in time by taking parts of that representation from different places.
It's a piecewise construction, not an addition of complete entities.

>I ended up parsing the string myself and calling set methods on the
>DT, but that seems pretty lame with all of these classes available.

It's not a bad way, especially if the string format is fixed.  With
DT::F::Strptime doing its bit, you still need to use the set methods to
copy the time-of-day from one DT object to another (since DT::Incomplete
isn't doing that for you).

-zefram

Reply via email to