Christian Hansen

  • About: I blog about Perl.
  • Commented on A Date with CPAN, Part 1: State of the Union
    Time::Moment doesn't have an explicit method for truncating, but you can truncate to day by calling the method ->at_midnight. You can also truncate to other calendar components by chaining the ->at_midnight call with a ->with_day_of_xxxx method call. Examples: $tm =...
  • Posted Calculating U.S Federal holidays with Time::Moment to Christian Hansen

  • Posted Simple and efficient formatting of relative date/time using Time::Moment to Christian Hansen
    use warnings;
    use Carp              qw[];
    use Time::Moment 0.19 qw[];
    sub YEAR   () { 365.2425    }
    sub MONTH  () { YEAR / 12   }
    sub DAY    () { 1           }
    sub HOUR   () { DAY / 24    }
    sub MINUTE () { HOUR / 60   }
    sub SECOND () { MINU…
  • Commented on Time::Moment vs DateTime
    And the benchmark:...
  • Commented on Time::Moment vs DateTime
    Time::Moment only use gettimeofday(2) and localtime(3) to compute the difference. I did consider to add Panda::Date until I reviewed the source code. Your code isn't thread safe and you require 5.18 to compile it, and your naïve implementation of a...
  • Posted Let's talk about Time::Moment and round-trip of strings to Christian Hansen

    In my previous blog post I wrote a lot more about Time::Moment, than appeared in the post (could have been my mistake due to a preview and error and a…

  • Commented on Time::Moment vs DateTime
    I'm not sure what you are asking, if you think I didn't try to improve the performance of, you think wrong (look at the changelog or ask Dave Rolsky). Time::Moment can never be "backwards" comparability with due to...
  • Commented on A bit more about Time::Moment
    While it would be technically possible, it would make the API confusing and fragile IMHO. I intend to add a Duration object (Time::Moment::Duration). $duration = $tm1->minus($tm2); $tm2 = $tm1->plus($duration); $tm2 = $tm1->minus($duration); $duration = $tm1 - $tm2; $tm2 = $tm1...
  • Commented on A bit more about Time::Moment
    LOL, somewhere this blogpost got choped =(...
  • Posted A bit more about Time::Moment to Christian Hansen

    In my previous blog post I mentioned the bottlenecks of DateTime and why I had to develop Time::Moment and it's underlying c library,

  • Commented on Time::Moment vs DateTime
    I'm glad you like c-dt, Time::Moment only uses a fraction of the API povided by c-dt. As you might have seen c-dt provides calculation of easter (western/orthodox), efficient business day calculations and weekday calculations and a bit more. c-dt is...
  • Commented on Time::Moment vs DateTime
    Thanks, I'll consider adding Class::Date and Panda::Date to the benchmark....
  • Commented on Time::Moment vs DateTime
    Time::Moment represents an unambiguous point in time, but it's not fully time zone aware. If you have a local time (a point in time with an offset) you may need to use a time zone if you intend to perform...
  • Posted Time::Moment vs DateTime to Christian Hansen

    In December last year released the first version of Time::Moment. I don't foresee any major changes in Time::Moment 0.16 API, so in next release I'll remove the "early preview release" notice in the description. I have been using 0.16 in…

  • Commented on YAPC::Asia Tokyo 2013: Fighting Legacy Code
    If my URL::Encode::XS makes a difference you should try Unicode::UTF8 (also my module), it makes a huge difference in my deployments. -- chansen...
  • Commented on Coping with double encoded UTF-8
    $UTF8_double_encoded is defined in the first code snippet. The usage of &utf8::is_utf8 is to determine to match Perl's internal representation of wide characters or the octet reprepresentation of UTF-8. -- chansen...
  • Commented on Tut # 7: jQuery, Ajax, xml, Perl, databases and utf8
    1) There is no need for using the utf8 pragma unless your literal strings contains UTF-X. 2) Using's utf8 decoder is a bad idea for external/untrusted data since it's a superset of UTF-8 and therefore accepts ill-formed UTF-8 (as...
  • Commented on Date arithmetic can be dangerous
    Just because you doesn't know how date arithmetic is done, doesn't meen it's dangerous! Assuming that a day consist of 60*60*24 seconds is ignorant!...
  • Commented on Perl regex escapes by version
    Very useful! Thanks to you and Tom! -- chansen...
  • Commented on CPAN modules for generating passwords
    Thanks for sharing, very useful post =)...
  • Posted What if sv_utf8_upgrade() used heuristic encoding? to Christian Hansen

    Heuristic: decode as native unless is well-formed UTF-X:

    sub heuristic_utf8_upgrade {
          unless utf8::decode($_[0]);
        return !!0;

    Here is some code to play with:

  • Posted Coping with double encoded UTF-8 to Christian Hansen

    A few months ago a client asked if could help them with a "double encoded UTF-8 data problem", they had managed to store several GB of data with "corrupted" UTF-8 (technically it's not corrupt UTF-8 since its well-formed UTF-8). During the process I developed several regexs that I would like to…

  • Commented on XS bits: Which class is this object blessed into? has anchors for perlapi.pod. sv_derived_from -- chansen...
Subscribe to feed Recent Actions from Christian Hansen

  • commented on A Date with CPAN, Part 1: State of the Union
    I can live without support for arbitrary timezones. I’m willing to be satisfied with two timezones: UTC, and whatever timezone I happen to be in. If you think about it, this is exactly what’s built into Perl itself: gmtime and localtime.

    So you never plan to write code that presents information to the user in their local time zone? Really?

    I think good timezone support is pretty crucial to most applications that have to interact with users outside of a single office.

  • commented on A Date with CPAN, Part 1: State of the Union

    Also don't forget locale support, which is also quite useful for any app that has to support a wide variety of users.

  • Mark Grimes commented on A Date with CPAN, Part 1: State of the Union

    One more to consider: DateTimeX::Immutable. Like Moonpig, it makes DateTime immutable, but it leaves the rest of it unchanged. It can often serve as a drop-in replacement for DateTime. Used with aliased you might be able to change just one line of code and never be bitten by mutating dates:
    use aliased 'DateTimeX::Immutable' => 'DateTime';

    Plus, you can make all your DBIx::Class date objects immutable with ="…

  • confuseAcat commented on A Date with CPAN, Part 1: State of the Union

    I'm in the same boat. I rarely deal with times, I often have to deal with dates.

    I sometimes feel like a freak because I rely on Date::Parse and especially Date::Format so much.

    Literally all the dates I deal with are well past 1970.

    I let the JavaScript in our front-end deal with locales and time zones.

    Plus the length of docs for the popular DateTimePiecMoment modules scares me off.

  • Buddy Burden commented on A Date with CPAN, Part 1: State of the Union

    Thanks everyone for the great comments!  I’ve been swamped at $work, so I haven’t had a chance to respond until now.  I’m going to answer everyone’s thoughts here in one post instead of trying to reply to each individually.  Hopefully everyone’s okay with that.

    First of all, the compliments.  Ron Savage and Bull Ruppert had nice things to say, and I think them for the kind words and the encouragement.  confuseAcat popped by to commiserate; it seems like we have similar perspectives, so hopefully this…

Subscribe to feed Responses to Comments from Christian Hansen

About is a common blogging platform for the Perl community. Written in Perl and offering the modern features you’ve come to expect in blog platforms, the site is hosted by Dave Cross and Aaron Crane, with a design donated by Six Apart, Ltd.