iLogic bietet im iLogic Editor einige vordefinierte Snippets für die Arbeit mit Datums- und Zeitangaben:
| Methode | Datentyp | Beschreibung von Autodesk |
|---|---|---|
Now() |
String | Returns a string containing Current Date and Time. |
DateString |
String | Returns the current Date. |
TimeString |
String | Returns the current Time. |
Die Ausgabeformate sind in Teilen jedoch abhängig von global gesetzten Region Settings im Betriebssystem und unterliegen auch kulturellen Gepflogenheiten. So kennt jeder die amerikanischen Unsitten ein Datum im Format MM-DD-YYYY anzugeben und auch sonst alles zu geben, um nicht mit dem metrischen System in Kontakt zu kommen:
iLogic Snippets
Die eingebauten Snippets können einfach über den iLogic Logger getestet werden und liefern ohne zusätzliche Parameter folgende Ausgaben:
Dim sNow As String = Now()
Dim sDate As String = DateString
Dim sTime As String = TimeString
Logger.Info("'Now()' liefert: {0}", sNow)
Logger.Info("'DateString' liefert: {0}", sDate)
Logger.Info("'TimeString' liefert: {0}", sTime)
Resultat:
Ausgabe Formatieren
Zur Formatierung der Zeitangaben stehen sämtliche Methoden des DateTime Namespace zur Verfügung. Am geläufigsten unter iLogic Code-Beispielen im Inventor Forum ist die Methode DateTime.ToString. Mit ihr können die Ausgaben leicht mittels Date & Time Format Specifiers den eigenen Ansprüchen angepasst werden:
Now.ToString("dd.MM.yyyy") ' 23.05.2025
Now.ToString("MMMM d, yyyy") ' May 23, 2025
Now.ToString("dddd, MMMM dd") ' Friday, May 23
Now.ToString("yyyy-MM-dd HH:mm") ' 2025-05-23 14:30
Auch stehen die Methoden ToLongDateString, ToShortDateString, ToShortTimeString und ToLongTimeString zur Verfügung:
Logger.Info(Now.ToShortTimeString) ' 16:02
Logger.Info(Now.ToLongTimeString) ' 16:02:39
Logger.Info(Now.ToShortDateString) ' 23.05.2025
Logger.Info(Now.ToLongDateString) ' 14. Mai 2025
Das Problem beider Beispiele wird schnell ersichtlich, denn sie wurden auf zwei unterschiedlich konfigurierten Computern ausgeführt und berücksichtigen die Region Settings des Betriebssystems:
Monatsangaben erscheinen bspw. einmal auf Englisch (May) und im zweiten Beispiel auf Deutsch (Mai). Dies kann zu Problemen in internationalen Unternehmen führen, da die gewohnten Ausgabeformate für Zeit- und Datumsangaben kulturell variieren und der gemeine Nutzer sein Betriebssystem in der eigenen Landessprache betreibt.
Möchte man ungeachtet der Region Settings immer ein einheitliches Ausgabeformat erzwingen, muss zusätzlich die CultureInfo Class aus dem System.Globalization Namespace hinzugezogen werden.
Das folgende Beispiel formatiert die Ausgaben gemäß amerikanischer Notation (en-US):
Imports System.Globalization
' Beispieldatum: 28.05.2024
Dim dDate As Date = New Date(2024, 05, 28)
Dim culture As CultureInfo = CultureInfo.GetCultureInfo("en-US")
Dim sDateWithoutCulture As String = dDate.ToString("MMMM d, yyyy")
Dim sDateCulture As String = dDate.ToString("MMMM d, yyyy", culture)
Logger.Info("Ohne Culture Info: {0}", sDateWithoutCulture)
Logger.Info("Mit Culture Info: {0}", sDateCulture)
Resultat:
Zeitdifferenzen berechnen
Zeitdifferenzen können ebenfalls einfach berechnet werden. Das folgende Beispiel ermittelt die vergangenen Tage zwischen den Daten 05.10.2025 und 14.11.2025:
Dim dStartDate As Date = New Date(2025, 10, 05)
Dim dEndDate As Date = New Date(2025, 11, 14)
Dim iDaysDifference As Integer = (dEndDate - dStartDate).Days
Logger.Info("Differenz: {0} Tage", iDaysDifference)
Resultat:
Zeiten Stoppen
Man kann zusätzlich mit der StopWatch Class die Zeit messen, die für die Ausführung einer iLogic benötigt wird. Das kann sinnvoll sein, wenn man unterschiedliche Lösungsansätze für ein Problem gegeneinander auf Performance testen möchte.
Das folgende Beispiel ermittelt, wie lang eine Schleife mit dem Startwert 1, dem Endwert 5, einem Inkrement von 1 und einem künstlichem Delay von 500 ms mittels Thread.Sleep Method zur Ausführung benötigt.
Dim sw As New Stopwatch()
sw.Start()
For i As Integer = 1 To 5 Step 1
Logger.Info("Schleife {0}", i)
Threading.Thread.Sleep(500)
Next
sw.Stop()
Logger.Info("Elapsed Time: " & sw.ElapsedMilliseconds & " ms")
Resultat: