www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Get milliseconds from time and construct time based on milliseconds

reply bauss <jacobbauss gmail.com> writes:
I have two questions that I can't seem to find a solution to 
after looking at std.datetime.

First question is how do I get the current time but in 
milliseconds?

Second is how do I construct a time ex. systime or datetime based 
on milliseconds?

Thanks
May 28
parent reply Ferhat =?UTF-8?B?S3VydHVsbXXFnw==?= <aferust gmail.com> writes:
On Tuesday, 28 May 2024 at 17:37:42 UTC, bauss wrote:
 I have two questions that I can't seem to find a solution to 
 after looking at std.datetime.

 First question is how do I get the current time but in 
 milliseconds?

 Second is how do I construct a time ex. systime or datetime 
 based on milliseconds?

 Thanks
Unixtime might be what you want: import std; import std.datetime; import std.stdio; void main() { // Get the current time in the UTC time zone    auto currentTime = Clock.currTime(); // Convert the time to the Unix epoch (1970-01-01T00:00:00Z)    Duration unixTime = currentTime - SysTime(DateTime(1970, 1, 1), UTC()); // Get the total milliseconds long milliseconds = unixTime.total!"msecs"; // Print the Unix time in milliseconds writeln("Unix time in milliseconds: ", milliseconds); }
May 28
parent reply bauss <jacobbauss gmail.com> writes:
On Tuesday, 28 May 2024 at 18:29:17 UTC, Ferhat Kurtulmuş wrote:
 On Tuesday, 28 May 2024 at 17:37:42 UTC, bauss wrote:
 I have two questions that I can't seem to find a solution to 
 after looking at std.datetime.

 First question is how do I get the current time but in 
 milliseconds?

 Second is how do I construct a time ex. systime or datetime 
 based on milliseconds?

 Thanks
Unixtime might be what you want: import std; import std.datetime; import std.stdio; void main() { // Get the current time in the UTC time zone    auto currentTime = Clock.currTime(); // Convert the time to the Unix epoch (1970-01-01T00:00:00Z)    Duration unixTime = currentTime - SysTime(DateTime(1970, 1, 1), UTC()); // Get the total milliseconds long milliseconds = unixTime.total!"msecs"; // Print the Unix time in milliseconds writeln("Unix time in milliseconds: ", milliseconds); }
Thanks a lot. Also figured out the second question based on your result. Simply doing: ``` SysTime(DateTime(1970, 1, 1), UTC()) + dur!"msecs"(milliseconds) ``` Seems to work.
May 28
parent reply Steven Schveighoffer <schveiguy gmail.com> writes:
On Tuesday, 28 May 2024 at 18:41:02 UTC, bauss wrote:
 On Tuesday, 28 May 2024 at 18:29:17 UTC, Ferhat Kurtulmuş wrote:
 On Tuesday, 28 May 2024 at 17:37:42 UTC, bauss wrote:
 I have two questions that I can't seem to find a solution to 
 after looking at std.datetime.

 First question is how do I get the current time but in 
 milliseconds?

 Second is how do I construct a time ex. systime or datetime 
 based on milliseconds?

 Thanks
Unixtime might be what you want: import std; import std.datetime; import std.stdio; void main() { // Get the current time in the UTC time zone    auto currentTime = Clock.currTime(); // Convert the time to the Unix epoch (1970-01-01T00:00:00Z)    Duration unixTime = currentTime - SysTime(DateTime(1970, 1, 1), UTC());
You can do `SysTime(unixTimeToStdTime(0))` to get a SysTime that is at the unix epoch.
 Also figured out the second question based on your result.

 Simply doing:

 ```
 SysTime(DateTime(1970, 1, 1), UTC()) + dur!"msecs"(milliseconds)
 ```

 Seems to work.
Note there is an `msecs` function: ```d SysTime(unixTimeToStdTime(0)) + milliseconds.msecs; ``` https://dlang.org/phobos/std_datetime_systime.html#unixTimeToStdTime https://dlang.org/phobos/core_time.html#msecs -Steve
May 28
parent bauss <jacobbauss gmail.com> writes:
On Tuesday, 28 May 2024 at 23:18:46 UTC, Steven Schveighoffer 
wrote:
 On Tuesday, 28 May 2024 at 18:41:02 UTC, bauss wrote:
 On Tuesday, 28 May 2024 at 18:29:17 UTC, Ferhat Kurtulmuş 
 wrote:
 On Tuesday, 28 May 2024 at 17:37:42 UTC, bauss wrote:
 I have two questions that I can't seem to find a solution to 
 after looking at std.datetime.

 First question is how do I get the current time but in 
 milliseconds?

 Second is how do I construct a time ex. systime or datetime 
 based on milliseconds?

 Thanks
Unixtime might be what you want: import std; import std.datetime; import std.stdio; void main() { // Get the current time in the UTC time zone    auto currentTime = Clock.currTime(); // Convert the time to the Unix epoch (1970-01-01T00:00:00Z)    Duration unixTime = currentTime - SysTime(DateTime(1970, 1, 1), UTC());
You can do `SysTime(unixTimeToStdTime(0))` to get a SysTime that is at the unix epoch.
 Also figured out the second question based on your result.

 Simply doing:

 ```
 SysTime(DateTime(1970, 1, 1), UTC()) + 
 dur!"msecs"(milliseconds)
 ```

 Seems to work.
Note there is an `msecs` function: ```d SysTime(unixTimeToStdTime(0)) + milliseconds.msecs; ``` https://dlang.org/phobos/std_datetime_systime.html#unixTimeToStdTime https://dlang.org/phobos/core_time.html#msecs -Steve
Thanks! That's a lot cleaner
May 29