NAME

Time::Str::Token - Convert captured date/time tokens to semantic values

SYNOPSIS

use Time::Str::Token qw( parse_day parse_month parse_day_name
                         parse_meridiem parse_tz_offset );

DESCRIPTION

This module provides functions for converting individual captured date/time tokens into their numeric equivalents. Each function accepts a single string and returns an integer, croaking on invalid input.

These functions are intended for use with captures from Time::Str::Regexp when building custom parsers.

FUNCTIONS

All functions are exportable on request. Use :all to import everything.

parse_day

my $day = parse_day($string);

Converts a day-of-month string to an integer (1-31). Accepts numeric values with or without leading zero, and ordinal suffixes.

parse_day('3')     # 3
parse_day('03')    # 3
parse_day('3rd')   # 3
parse_day('24th')  # 24
parse_day('31st')  # 31

Croaks with Unable to parse: day is invalid on failure.

parse_month

my $month = parse_month($string);

Converts a month string to an integer (1-12). Accepts numeric values with or without leading zero, abbreviated names, full names, and Roman numerals. Case-insensitive.

parse_month('1')         # 1
parse_month('01')        # 1
parse_month('Jan')       # 1
parse_month('january')   # 1
parse_month('IX')        # 9
parse_month('sept')      # 9

Croaks with Unable to parse: month is invalid on failure.

parse_day_name

my $dow = parse_day_name($string);

Converts a day name to an integer (1=Monday .. 7=Sunday). Accepts abbreviated and full names. Case-insensitive.

parse_day_name('Mon')       # 1
parse_day_name('monday')    # 1
parse_day_name('Tues')      # 2
parse_day_name('Thu')       # 4
parse_day_name('Thurs')     # 4
parse_day_name('Sunday')    # 7

Croaks with Unable to parse: day name is invalid on failure.

parse_meridiem

my $offset = parse_meridiem($string);

Converts an AM/PM indicator to an hour offset (0 for AM, 12 for PM). Accepts AM, PM, A.M., and P.M.. Case-insensitive.

parse_meridiem('am')    # 0
parse_meridiem('PM')    # 12
parse_meridiem('a.m.')  # 0
parse_meridiem('P.M.')  # 12

Croaks with Unable to parse: meridiem is invalid on failure.

parse_tz_offset

my $minutes = parse_tz_offset($string);

Converts a timezone offset string to a signed offset in minutes. Accepts multiple formats.

parse_tz_offset('+0100')   #  60
parse_tz_offset('-05:00')  # -300
parse_tz_offset('+05')     #  300
parse_tz_offset('+0530')   #  330
parse_tz_offset('+5')      #  300
parse_tz_offset('+5:30')   #  330
parse_tz_offset('+00:00')  #  0

Croaks with Unable to parse: timezone offset is invalid on failure.

SEE ALSO

Time::Str, Time::Str::Regexp, Time::Str::Calendar

AUTHOR

Christian Hansen

COPYRIGHT AND LICENSE

Copyright (C) 2026 by Christian Hansen

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.