Raku Land



Ubuntu MacOS Windows Coverage Status


TimeUnit - library for conversion a time from one unit to another.


use TimeUnit;

sub beep-after(TimeUnit:D $time) {
    Promise.in($time.to-seconds).then: { beep() }

Promise.in(timeunit(:3days :1hour :3sec).to-seconds).then: { send-email() }

days(4) + hours(3).minus(nanos(3)) < timeunit(:4d :3h);

minutes(15).to(hours) == 0.25;


If you use zef, then zef install TimeUnit, or pakku add TimeUnit if you use Pakku.


TimeUnit library provides a simple way for conversion time without any 'magic numbers' in code. Also, TimeUnit can help you to write a more intuitive API in part of using time.

You may use the following routines to create corresponding TimeUnit object: nanos, micros, millis, seconds, minutes, hours and days. All of them take a single Numeric() argument. Additionally, you may create TimeUnit object through timeunit routing in a relaxed way like timeunit(:1day :3h :6nanoseconds).

TimeUnit object can be compared as ordinary Numerics. Also, you may add and subtract them with infix:<+> and infix:<-> routines and plus and minus methods.

To convert TimeUnit object to some numeric representation use one of the following method: to-nanos, to-micros, to-millis, to-seconds, to-hours, to-days or simply to('days'). It is possible to pass a name of unit to to method with or without quotation.


Mikhail Khorkov <atroxaper[at]cpan.org>

Sources can be found at: github. The new Issues and Pull Requests are welcome.


Copyright 2022 Mikhail Khorkov

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.