Convert duration to years?

Nestor via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jan 14 22:58:39 PST 2017


On Sunday, 15 January 2017 at 06:23:56 UTC, Dave Chapman wrote:
> Does this do what you want?
> import std.stdio;
>
> uint getAge(int yyyy, int mm, int dd) {
>   import std.datetime;
>   SysTime t1 = SysTime(Date(yyyy, mm, dd));
>   SysTime t2 = Clock.currTime();
>   return( (t2.year - t1.year));
> }
>
> void main() {
>   auto age = getAge(1980, 1, 1);
>   writefln("age is %s", age);
> }

It seems to work, but not very accurately, see variation:

import std.stdio;

uint getAge() {
   import std.datetime;
   SysTime t1 = SysTime(Date(2000, 12, 31));
   SysTime t2 = SysTime(Date(2001, 1, 1));
   return((t2.year - t1.year));
}

void main() {
   auto age = getAge();
   writefln("age is %s", age);
}


I eventually came up with this, but it seems an ugly hack:

import std.stdio;

uint getAge(int yyyy, ubyte mm, ubyte dd) {
   ubyte correction;
   import std.datetime;
   SysTime t = Clock.currTime();
   if (t.month < mm) correction = 1;
   else if (t.month == mm) correction = (t.day < dd) ? 1 : 0;
   else correction = 0;
   return (t.year - yyyy - correction);
}

void main() {
   try
     writefln("Edad: %s aƱos.", getAge(1958, 1, 21));
   catch(Exception e) {
     writefln("%s.\n(%s, line %s)", e.msg, e.file, e.line);
   }
}

Isn't there a built-in function to do this?


More information about the Digitalmars-d-learn mailing list