Axaptapedia is now maintained by AgileCadence For more information please click here.

Current Time

From Axaptapedia
Jump to: navigation, search

Introduction[edit]

This document lists different ways of getting the current date and/or time on the local machine, AOS server or else where, and then converting it to a utcdatetime data type.

Dynamics AX versions[edit]

Tested on Dynamics AX 2009 SP1 RU-2, RU-6

Getting the current utcDateTime[edit]

timeNow Function[edit]

Client[edit]

Retrieves the current UTC time from the local machine<xpp>public static client utcDateTime timeNowClient() {;

   return DateTimeUtil::newDateTime(
       2\\1\\1900,
       timeNow(),
       DateTimeUtil::getClientMachineTimeZone());

}</xpp>Example: 02.01.1900 16:45:02

Server[edit]

Retrieves the current UTC time from the AOS server<xpp>public static server utcDateTime timeNowServer() {;

   return DateTimeUtil::newDateTime(
       2\\1\\1900,
       timeNow(),
       DateTimeUtil::getClientMachineTimeZone());

}</xpp>Example: 02.01.1900 16:46:58

DateTimeUtil::time Method[edit]

Client[edit]

Retrieves the current time from the local machine, converts it to an int and then returns it as a utcdatetime data type.<xpp>public static client utcDateTime timeClient() {;

   return DateTimeUtil::newDateTime(
       02\\01\\1900,
       DateTimeUtil::time(DateTimeUtil::getSystemDateTime()));

}</xpp>Example: 02.01.1900 16:45:02

Server[edit]

Retrieves the current time from the AOS, rather than the local machine, converts it to an int and then returns it as a utcdatetime data type.<xpp>public static client utcDateTime timeClientServer() {;

   return DateTimeUtil::newDateTime(
       02\\01\\1900,
       DateTimeUtil::time(DateTimeUtil::utcNow()));

}</xpp>Example: 02.01.1900 16:46:58


Retrieves the current time from the AOS, converts it to an int and then returns it as a utcdatetime data type.<xpp>public static server utcDateTime timeServer() {;

   return DateTimeUtil::newDateTime(
       02\\01\\1900,
       DateTimeUtil::time(DateTimeUtil::parse("1900-01-02T"+time2StrHMS(timeNow()))),
       DateTimeUtil::getClientMachineTimeZone());

}</xpp>Example: 02.01.1900 16:46:58

today Function[edit]

Client[edit]

Retrieves the current date on the local machine.<xpp>public static client utcDateTime todayClient() {;

   return DateTimeUtil::newDateTime(
       today(),
       0,
       DateTimeUtil::getClientMachineTimeZone());

}</xpp>Example: 24.11.2010 00:00:00

Server[edit]

Retrieves the current date on the AOS.<xpp>public static server utcDateTime todayServer() {;

   return DateTimeUtil::newDateTime(
       today(),
       0,
       DateTimeUtil::getClientMachineTimeZone());

}</xpp>Example: 24.11.2010 00:00:00

systemDateGet Function[edit]

Client[edit]

Retrieves the session date if it has been set, otherwise the current date of the local machine, and then converts it to a utcdatetime data type.<xpp>public static client utcDateTime systemDateGetClient() {;

   return DateTimeUtil::newDateTime(
       systemDateGet(),
       0,
       DateTimeUtil::getClientMachineTimeZone());

}</xpp>Example: 24.11.2010 00:00:00

Server[edit]

Retrieves the session date if it has been set, otherwise the current date of the AOS, and then converts it to a utcdatetime data type.<xpp>public static server utcDateTime systemDateGetServer() {;

   return DateTimeUtil::newDateTime(
       systemDateGet(),
       0,
       DateTimeUtil::getClientMachineTimeZone());

}</xpp>Example: 24.11.2010 00:00:00

DateTimeUtil::getSystemDateTime Method[edit]

Client[edit]

Gets the current UTC date and time on the local machine<xpp>public static client utcDateTime getSystemDateTimeClient() {;

   return DateTimeUtil::getSystemDateTime();

}</xpp>Example: 24.11.2010 16:45:02

Server[edit]

Gets the current UTC date and time on the AOS<xpp>public static server utcDateTime getSystemDateTimeServer() {;

   return DateTimeUtil::getSystemDateTime();

}</xpp>Example: 24.11.2010 16:46:58

COMVariant::createFromTime Method[edit]

Client[edit]

Creates a new COMVariant object, initializes it with the current time on the local machine and returns a utcdatetime data type.<xpp>public static client utcDateTime createFromTimeClient() {

   #XppTexts
   #define.Format("\%1 \%2")
   #define.Date(1)
   #define.Time(2)
   COMVariant                       cOMVariant = COMVariant::createFromTime(timeNow());
   container                        dateParts = str2Con(cOMVariant.ToString(), #Space);
   System.Globalization.CultureInfo cultureInfo;
   System.DateTime                  dateTime;
   ;
   cultureInfo = System.Globalization.CultureInfo::get_CurrentCulture();
   dateTime = System.DateTime::Parse(
       strFmt(#Format,
           conPeek(dateParts, #Date),
           conPeek(dateParts, #Time)),
       cultureInfo,
       System.Globalization.DateTimeStyles::NoCurrentDateDefault);
   return dateTime.ToUniversalTime();

}</xpp>Example: 24.11.2010 16:45:02

Server[edit]

Creates a new COMVariant object, initializes it with the current time on the AOS and returns a utcdatetime data type.<xpp>public static server utcDateTime createFromTimeServer() {

   #XppTexts
   #define.Format("\%1 \%2")
   #define.Date(1)
   #define.Time(2)
   COMVariant                       cOMVariant = COMVariant::createFromTime(timeNow());
   container                        dateParts = str2Con(cOMVariant.ToString(), #Space);
   System.Globalization.CultureInfo cultureInfo;
   System.DateTime                  dateTime;
   ;
   new InteropPermission(InteropKind::ClrInterop).assert();
   cultureInfo = System.Globalization.CultureInfo::get_CurrentCulture();
   dateTime = System.DateTime::Parse(
       strFmt(#Format,
           conPeek(dateParts, #Date),
           conPeek(dateParts, #Time)),
       cultureInfo,
       System.Globalization.DateTimeStyles::NoCurrentDateDefault);
   return CLRInterop::getAnyTypeForObject(dateTime.ToUniversalTime());

}</xpp>Example: 24.11.2010 16:46:58

System.DateTime::get_Now() Method[edit]

Client[edit]

Gets a DateTime object that is set to the current date and time on the local machine, expressed as the local time, and returns it as a utcdatetime data type<xpp>public static client utcDateTime get_NowClient() {;

   return CLRInterop::getAnyTypeForObject(
       System.DateTime::get_Now().ToUniversalTime());

}</xpp>Example: 24.11.2010 16:45:02

Server[edit]

Gets a DateTime object that is set to the current date and time on the AOS, expressed as the local time, and returns it as a utcdatetime data type<xpp>public static server utcDateTime get_NowServer() {;

   new InteropPermission(InteropKind::ClrInterop).assert();
   return CLRInterop::getAnyTypeForObject(
       System.DateTime::get_Now().ToUniversalTime());

}</xpp>Example: 24.11.2010 16:46:58

System.DateTime::get_UtcNow Method[edit]

Client[edit]

Gets a DateTime object that is set to the current date and time on the local machine, and returs it as a utcdatetime data type.<xpp>public static client utcDateTime get_UtcNowClient() {;

   return System.DateTime::get_UtcNow();

}</xpp>Example: 24.11.2010 16:45:02

Server[edit]

Gets a DateTime object that is set to the current date and time on the AOS, and returs it as a utcdatetime data type.<xpp>public static server utcDateTime get_UtcNowServer() {;

   new InteropPermission(InteropKind::ClrInterop).assert();
   return CLRInterop::getAnyTypeForObject(
       System.DateTime::get_UtcNow());

}</xpp>Example: 24.11.2010 16:46:58

%date% %time% (Shell Scripting via WinAPI)[edit]

Client[edit]

<xpp>/// <summary> /// Returns the current date and time of the local machine as a utcdatetime data type. /// </summary> public static client utcDateTime echoDateTimeClient(

   FilePath _file = )

{

   #WinAPI
   #XppTexts
   #File
   #define.Application('cmd')
   #define.Parameters('/c "echo %date% %time%>\%1"')
   FilePath        file = _file;
   System.DateTime dateTime;
   ;
   // Gets the time from the local machine and writes it to a file, but only
   // when an existing file was not passed in.
   if (!file)
   {
       file = WinAPI::getTempFilename(
           WinApi::getTempPath(),
           #EmptyString);
       WinAPI::shellExecute(#Application,
           strFmt(#Parameters, file),
           #EmptyString,
           #EmptyString,
           #SW_HIDE,
           true);
   }
   // Initializes a DateTime variable with the contents of the given file.
   dateTime = System.DateTime::Parse(
       con2Str(new AsciiIo(file, #io_read).read(),
           #Space));
   return dateTime.ToUniversalTime();

}</xpp>Example: 24.11.2010 16:45:02

Server[edit]

<xpp>/// <summary> /// Returns the current date and time of the local machine (not the AOS server) as a utcdatetime data type. /// </summary> // AOSRunMode::Server public static server utcDateTime echoDateTimeServer() {

   #WinAPI
   #XppTexts
   #define.Application('cmd')
   #define.Parameters('/c "echo %date% %time%>\%1"')
   FilePath file;
   ;
   file = WinAPI::getTempFilename(
       WinApi::getTempPath(),
       #EmptyString);
   WinAPI::shellExecute(#Application,
       strFmt(#Parameters, file),
       #EmptyString,
       #EmptyString,
       #SW_HIDE,
       true);
   // The current time was written to a file, but on the client, so we have to
   // switch to the client to access the file and extract the time from it.
   return TutorialDateTime::echoDateTimeClient(file);

}</xpp>Example: 24.11.2010 16:45:02

Win32_LocalTime (WMI via COM)[edit]

Client[edit]

<xpp>/// <summary> /// Gets the current point in time on the local machine as Win32_LocalTime and converts it to a utcdatetime data type. /// </summary> public static client utcDateTime Win32_LocalTimeClient() {

   #define.Moniker('winmgmts:')
   #define.WMIClass('Win32_LocalTime')
   COM             wMIService;
   COM             localTime;
   COM             time;
   System.DateTime dateTime;
   ;
   wMIService = COM::getObjectEx(#Moniker);            // BP Deviation Documented
   localTime = wMIService.InstancesOf(#WMIClass);
   time = new COMEnum2Object(localTime).getFirst();
                                                       // BP Deviation Documented
   dateTime = new System.DateTime(                     // BP Deviation Documented
       System.Int32::Parse(int2str(time.year())),      // BP Deviation Documented
       System.Int32::Parse(int2str(time.month())),     // BP Deviation Documented
       System.Int32::Parse(int2str(time.day())),       // BP Deviation Documented
       System.Int32::Parse(int2str(time.hour())),      // BP Deviation Documented
       System.Int32::Parse(int2str(time.minute())),    // BP Deviation Documented
       System.Int32::Parse(int2str(time.second())));
   return dateTime.ToUniversalTime();

}</xpp>Example: 24.11.2010 16:45:02

Server[edit]

<xpp>/// <summary> /// Gets the current point in time on the AOS as Win32_LocalTime and converts it to a utcdatetime data type. /// </summary> public static server utcDateTime Win32_LocalTimeServer() {

   #define.Moniker('winmgmts:')
   #define.WMIClass('Win32_LocalTime')
   COM             wMIService;
   COM             localTime;
   COM             time;
   System.DateTime dateTime;
   Set             permissions = new Set(Types::Class);
   ;
   permissions.add(new InteropPermission(InteropKind::ComInterop));
   permissions.add(new InteropPermission(InteropKind::ClrInterop));
   CodeAccessPermission::assertMultiple(permissions);
   wMIService = COM::getObjectEx(#Moniker);            // BP Deviation Documented
   localTime = wMIService.InstancesOf(#WMIClass);
   time = new COMEnum2Object(localTime).getFirst();
                                                       // BP Deviation Documented
   dateTime = new System.DateTime(                     // BP Deviation Documented
       System.Int32::Parse(int2str(time.year())),      // BP Deviation Documented
       System.Int32::Parse(int2str(time.month())),     // BP Deviation Documented
       System.Int32::Parse(int2str(time.day())),       // BP Deviation Documented
       System.Int32::Parse(int2str(time.hour())),      // BP Deviation Documented
       System.Int32::Parse(int2str(time.minute())),    // BP Deviation Documented
       System.Int32::Parse(int2str(time.second())));
   return CLRSystemDateTime2UtcDateTime(dateTime.ToUniversalTime());

}</xpp>Example: 24.11.2010 16:46:58

Net Time /Domain (Shell Scripting via System.Diagnostics.Process)[edit]

Client[edit]

<xpp>/// <summary> /// Gets a string with the current time on the domain server and parses it to return it as a utcdatetime data type. /// </summary> public static client utcDateTime netTimeClient() {

   #XppTexts
   #ERX
   #SRSModel
   #define.Program('cmd')
   #define.Parameters('/c "net time /domain:\%1"')
   #define.Region('en-us')  // Needed for XP, which seems to return the date in the US regional format.  This seems to have been fixed with Windows 7.
   #define.MDY(213)
   #define.OutputDate(2)
   #define.OutputTime(1)
   System.Diagnostics.Process          process = new System.Diagnostics.Process();
   System.Diagnostics.ProcessStartInfo startInfo;
   System.IO.StreamReader              standardOutput;
   System.DateTime                     dateTime;
   UserInfo                            userInfo;
   int                                 startPosition;
   str                                 output;
   container                           split;
   ;
   // Gets the domain name
   select firstonly UserInfo
       where UserInfo.Id == curUserId();
   // Defines the process to be executed.
   startInfo = process.get_StartInfo();
   startInfo.set_UseShellExecute(false);
   startInfo.set_RedirectStandardOutput(true);
   startInfo.set_WorkingDirectory(#defaultDrive); // The process will fail if the working directory is a network share.
   startInfo.set_FileName(#Program);
   startInfo.set_Arguments(strFmt(#Parameters, userInfo.networkDomain));
   // Executes the process
   process.set_StartInfo(startInfo);
   process.Start();
   process.WaitForExit();
   // Gets the output from the process and releases the objects.
   standardOutput = process.get_StandardOutput();
   process.Dispose();
   output = standardOutput.ReadLine(); // Output: Aktuelle Zeit auf \\MyDomain ist 11/30/2010 4:12 PM.
   standardOutput.Dispose();
   // Gets the date starting point.
   startPosition = strfind(output, #Space,
           strfind(output, #SRSPathSeparator, 1, strLen(output)),
           -strfind(output, #SRSPathSeparator, 1, strLen(output))) + 1;
   // Trims the text to the date and time        
   output = substr(output,
       startPosition,
       strLen(output) - startPosition);
       
   // Converts the string to a utcdatetime data type.
   dateTime = System.DateTime::Parse(output,
       System.Globalization.CultureInfo::GetCultureInfoByIetfLanguageTag(#Region),
       System.Globalization.DateTimeStyles::NoCurrentDateDefault);
       
   return dateTime.ToUniversalTime();

}</xpp>Example: 24.11.2010 16:47:00

GETDATE (Transact-SQL via System.Data.SqlClient.SqlCommand)[edit]

Server[edit]

<xpp>/// <summary> /// Returns the current database system timestamp as a utcdatetime data type without the database time zone offset. /// This value is derived from the operating system of the computer on which the instance of SQL Server is running. /// </summary> /// <remarks> /// Could also use CURRENT_TIMESTAMP or {fn Now()}. /// </remarks> public static server utcDateTime getDateSQLServer() {

   #localmacro.Statement
       'SELECT GETDATE()'
   #endmacro
   SysSQLSystemInfo                                 systemInfo = SysSQLSystemInfo::construct();
   System.Data.SqlClient.SqlConnectionStringBuilder builder;
   System.Data.SqlClient.SqlConnection              connect;
   System.Data.SqlClient.SqlCommand                 command;
   System.DateTime                                  dateTime;
   ;
   new InteropPermission(InteropKind::ClrInterop).assert();
   builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
   builder.set_DataSource(systemInfo.getLoginServer());
   builder.set_InitialCatalog(systemInfo.getloginDatabase());
   builder.set_IntegratedSecurity(true);
   command = new System.Data.SqlClient.SqlCommand(#Statement,
       new System.Data.SqlClient.SqlConnection(builder.ToString()));
   connect = command.get_Connection(); 
   connect.Open();
   dateTime = command.ExecuteScalar();
   command.Dispose();
   connect.Dispose();
   return CLRInterop::getAnyTypeForObject(dateTime.ToUniversalTime());

}</xpp>Example: 24.11.2010 16:47:00

NIST Internet Time Service (via System.Net.Sockets.TcpClient)[edit]

Client[edit]

<xpp>/// <summary> /// Returns a utcdattime data type set with a time server used by the NIST Internet Time Service (ITS). /// </summary> public static client utcDateTime remoteTimeServer() {

   #XppTexts
   #define.Format('20\%1T\%2')
   #define.Date(2)
   #define.Time(3)
   #define.Port(13)
   #define.Server('time-b.nist.gov')
   System.Net.Sockets.TcpClient tcpClient;
   System.Net.Sockets.NetworkStream networkStream;
   System.Text.Encoding encoding;
   System.Byte[] bytes;
   int receiveBufferSize;
   container result;
   ;
   tcpClient = new System.Net.Sockets.TcpClient();
   tcpClient.Connect(#Server, #Port);
   networkStream = tcpClient.GetStream();
   receiveBufferSize = tcpClient.get_ReceiveBufferSize();
   bytes = new System.Byte[receiveBufferSize]();
   networkStream.Read(bytes, 0, receiveBufferSize);
   tcpClient.Close();
   encoding = System.Text.Encoding::get_ASCII();
   result = str2Con(encoding.GetString(bytes), #Space);
   return DateTimeUtil::parse(strFmt(#Format,
       conPeek(result, #Date),
       conPeek(result, #Time)));

}</xpp>Example: 24.11.2010 16:45:05