diff --git a/src/edu/nps/moves/dis7/utilities/DisTime.java b/src/edu/nps/moves/dis7/utilities/DisTime.java
index 5c2a1d19dab48c7b52af82d38be533fed21ee0f5..06172c85e116e9692e43a1264615e1f6a6aa774d 100644
--- a/src/edu/nps/moves/dis7/utilities/DisTime.java
+++ b/src/edu/nps/moves/dis7/utilities/DisTime.java
@@ -8,6 +8,8 @@ package edu.nps.moves.dis7.utilities;
 import edu.nps.moves.dis7.pdus.*;
 import java.text.SimpleDateFormat;
 import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 
 /**
@@ -171,6 +173,82 @@ public class DisTime
     private static final String dateFormatPattern = "yyyy-mm-dd";
     private static final String timeFormatPattern = "HH:mm:ss";
 
+    /** Enumerations for prepared time formatters */
+    public enum TimeFormatterType
+    {
+      /** time formatter output accuracy in seconds */
+      SECONDS,
+      /** time formatter output accuracy in tenths of seconds */
+      TENTHSECONDS,
+      /** time formatter output accuracy in hundredths of seconds */
+      HUNDREDTHSECONDS,
+      /** time formatter output accuracy in milliseconds */
+      MILLISECONDS,
+      /** time formatter output accuracy in microseconds */
+      MICROSECONDS,
+      /** time formatter output accuracy in nanoseconds */
+      NANOSECONDS;
+    }
+    
+    /** Format time <code>HH:mm:ss</code>
+     * @see java.time.format.DateTimeFormatter */
+    public static final DateTimeFormatter timeFormatterSeconds          = DateTimeFormatter.ofPattern("HH:mm:ss");
+    /** Format time <code>HH:mm:ss.S</code>, default
+     * @see java.time.format.DateTimeFormatter */
+    public static final DateTimeFormatter timeFormatterTenthSeconds     = DateTimeFormatter.ofPattern("HH:mm:ss.S");
+    /** Format time <code>HH:mm:ss.SS</code>
+     * @see java.time.format.DateTimeFormatter */
+    public static final DateTimeFormatter timeFormatterHundredthSeconds = DateTimeFormatter.ofPattern("HH:mm:ss.SS");
+    /** Format time <code>HH:mm:ss.SSS</code>
+     * @see java.time.format.DateTimeFormatter */
+    public static final DateTimeFormatter timeFormatterMilliSeconds     = DateTimeFormatter.ofPattern("HH:mm:ss.SSS");
+    /** Format time <code>HH:mm:ss.SSSSSS</code>
+     * @see java.time.format.DateTimeFormatter */
+    public static final DateTimeFormatter timeFormatterMicroSeconds     = DateTimeFormatter.ofPattern("HH:mm:ss.SSSSSS");
+    /** Format time <code>HH:mm:ss.SSSSSSSSS</code>
+     * @see java.time.format.DateTimeFormatter */
+    public static final DateTimeFormatter timeFormatterNanoSeconds      = DateTimeFormatter.ofPattern("HH:mm:ss.SSSSSSSSS");
+    
+    private static DateTimeFormatter timeFormatter = timeFormatterTenthSeconds;
+
+    /**
+     * Get time format used for text logging
+     * @return current timeFormatter
+     */
+    public static DateTimeFormatter getTimeFormatter() 
+    {
+        return timeFormatter;
+    }
+    /**
+     * Set time format for text logging
+     * @param timeFormatterChoice enumeration for the new timeFormatter to set
+     */
+    public static void setTimeFormatter(DisTime.TimeFormatterType timeFormatterChoice) 
+    {
+        switch (timeFormatterChoice)
+        {
+            case SECONDS:
+                timeFormatter = DisTime.timeFormatterSeconds;
+                break;
+            case TENTHSECONDS:
+                timeFormatter = DisTime.timeFormatterTenthSeconds;
+                break;
+            case HUNDREDTHSECONDS:
+                timeFormatter = DisTime.timeFormatterHundredthSeconds;
+                break;
+            case MILLISECONDS:
+                timeFormatter = DisTime.timeFormatterMilliSeconds;
+                break;
+            case MICROSECONDS:
+                timeFormatter = DisTime.timeFormatterMicroSeconds;
+                break;
+            case NANOSECONDS:
+                timeFormatter = DisTime.timeFormatterNanoSeconds;
+                break;
+            // no others allowed
+        }
+    }
+    
    // public static DisTime disTime = null;
 
     /**
@@ -373,40 +451,54 @@ public class DisTime
     }
     
     /**
-     * Convert timestamp value to Instant for time operationss,
-     * taking into account epochLvc and TimeStampStyle (DIS absolute/relative, Unix or Year).
+     * Convert timestamp value to Instant for time operations.
+     * TODO take into account epochLvc and TimeStampStyle (DIS absolute/relative, Unix or Year).
      * TODO consider different formats for different timestampStyle values.
-     * @param timestamp value in milliseconds
+     * @param timestamp value in seconds
      * @return corresponding Instant value (with 31-bit fidelity)
      */
-    public static Instant convertToInstant(int timestamp)
+    public static Instant convertToInstant(long timestamp)
     {
-        return Instant.now(); // TODO
+        // https://stackoverflow.com/questions/57411881/create-java-datetime-instant-from-microseconds
+        return Instant.EPOCH.plus(timestamp,ChronoUnit.SECONDS);
     }
     
     /**
-     * Convert timestamp value to Instant for time operations,
-     * taking into account epochLvc and TimeStampStyle (DIS absolute/relative, Unix or Year).
+     * Convert timestamp value to LocalTime for time operations.
+     * TODO take into account epochLvc and TimeStampStyle (DIS absolute/relative, Unix or Year).
      * TODO consider different formats for different timestampStyle values.
-     * @param timestamp value in milliseconds
+     * @param timestamp value in seconds
      * @return corresponding Instant value (with 31-bit fidelity)
      */
-    public static LocalDateTime convertToLocalDateTime(int timestamp)
+    public static LocalTime convertToLocalTime(long timestamp)
     {
-        return LocalDateTime.now(); // TODO
+        return LocalTime.ofSecondOfDay(timestamp);
     }
     
     /**
-     * Convert timestamp value to Instant for time operations,
-     * taking into account epochLvc and TimeStampStyle (DIS absolute/relative, Unix or Year).
+     * Convert timestamp value to LocalDateTime for time operations.
+     * TODO take into account epochLvc and TimeStampStyle (DIS absolute/relative, Unix or Year).
      * TODO consider different formats for different timestampStyle values.
-     * @param timestamp value in milliseconds
-     * @return corresponding Instant value (with 31-bit fidelity)
+     * @param timestamp value in seconds
+     * @return corresponding LocalDateTime value (with 31-bit fidelity)
      */
+    public static LocalDateTime convertToLocalDateTime(long timestamp)
+    {
+        ZoneOffset zoneOffset = ZoneOffset.UTC;
+        return LocalDateTime.ofEpochSecond(timestamp,0,zoneOffset);
+    }
+    
+    /**
+     * TODO Convert timestamp value to ZonedDateTime for time operations.
+     * TODO take into account epochLvc and TimeStampStyle (DIS absolute/relative, Unix or Year).
+     * TODO consider different formats for different timestampStyle values.
+     * @param timestamp value in LocalDateTime
+     * @return corresponding Instant value (with 31-bit fidelity)
     public static ZonedDateTime convertToZonedDateTime(int timestamp)
     {
         return ZonedDateTime.now(); // TODO
     }
+     */
     
     /**
      * Convert timestamp value to string for logging and diagnostics,
@@ -563,6 +655,7 @@ public class DisTime
         } 
         catch (InterruptedException ex) {}
     }
+    
     /** Self-test for basic smoke testing */
     private void selfTest()
     {        
@@ -609,6 +702,13 @@ public class DisTime
         System.out.println("DisTime.getEpochLvc(), Instant.now(), duration    = " + DisTime.getEpochLvc() + ", " + now + ", " + 
             java.time.Duration.between(getEpochLvc(), now).toMillis() + " msec");
 //        System.out.println("DisTime.getCurrentDisTimeUnitsSinceTopOfHour() = " + convertToString(DisTime.getCurrentDisTimeUnitsSinceTopOfHour()) + " = " + DisTime.getCurrentDisTimeUnitsSinceTopOfHour());
+        
+        long timeSeconds = (83 * 60); // 83 minutes * 60 seconds/minute = 00:01:23
+        System.out.println("time checks:");
+        System.out.println("timeSeconds (83 minutes * 60 seconds/minute) = " + timeSeconds + " seconds");
+        System.out.println("DisTIme.convertToLocalTime(timeSeconds)      = " + DisTime.convertToLocalTime    (timeSeconds).format(DisTime.getTimeFormatter()));
+        System.out.println("DisTime.convertToLocalDateTime(timeSeconds)  = " + DisTime.convertToLocalDateTime(timeSeconds).format(DisTime.getTimeFormatter()));
+        System.out.println("DisTime.convertToInstant(timeSeconds)        = " + DisTime.convertToInstant      (timeSeconds));
     }
 
     /**
diff --git a/src/edu/nps/moves/dis7/utilities/DisTimeLog.txt b/src/edu/nps/moves/dis7/utilities/DisTimeLog.txt
index 178b7899cb61796495f6a953182ead0ba9646cda..ac3d3b5c4e8d53a49f3301ba44727438e73ca2e3 100644
--- a/src/edu/nps/moves/dis7/utilities/DisTimeLog.txt
+++ b/src/edu/nps/moves/dis7/utilities/DisTimeLog.txt
@@ -1,30 +1,32 @@
-ant -f C:\\x3d-github\\open-dis7-java -Dnb.internal.action.name=run.single -Djavac.includes=edu/nps/moves/dis7/utilities/DisTime.java -Drun.class=edu.nps.moves.dis7.utilities.DisTime run-single
+ant -f C:\\x3d-github\\opendis7-java -Dnb.internal.action.name=run.single -Djavac.includes=edu/nps/moves/dis7/utilities/DisTime.java -Drun.class=edu.nps.moves.dis7.utilities.DisTime run-single
 init:
-Deleting: C:\x3d-github\open-dis7-java\build\built-jar.properties
+Deleting: C:\x3d-github\opendis7-java\build\built-jar.properties
 deps-jar:
-Updating property file: C:\x3d-github\open-dis7-java\build\built-jar.properties
-Compiling 1 source file to C:\x3d-github\open-dis7-java\build\classes
+Updating property file: C:\x3d-github\opendis7-java\build\built-jar.properties
+Compiling 1 source file to C:\x3d-github\opendis7-java\build\classes
+warning: [options] bootstrap class path not set in conjunction with -source 8
+1 warning
 compile-single:
 run-single:
 *** DisTime.main() self test started...
 === legacy java.util.Date, calendar methods ===
 DisTime.getTimestampStyle()                       = IEEE_ABSOLUTE
 patterns                                            yyyy-mm-dd HH:mm:ss
-DisTime.getCurrentDisTimestamp() initialTimestamp = 1969-47-20 22:47:26 = 3369014103 = -925953193 (unsigned vs signed output)
-DisTime.getCurrentDisTimestamp()                  = 1969-47-20 22:47:37 = 3369026033 = -925941263 (unsigned vs signed output)
-DisTime.getCurrentDisAbsoluteTimestamp()          = 1969-47-20 22:47:38 = 3369026033
-DisTime.getCurrentDisRelativeTimestamp()          = 1969-47-20 22:47:38 = 3369026032
-DisTime.getCurrentDisTimeUnitsSinceTopOfHour()    = 1970-55-20 03:55:13 = 1684513016
+DisTime.getCurrentDisTimestamp() initialTimestamp = 1970-50-20 10:50:56 = 1709456635 = 1709456635 (unsigned vs signed output)
+DisTime.getCurrentDisTimestamp()                  = 1970-51-20 10:51:03 = 1709463793 = 1709463793 (unsigned vs signed output)
+DisTime.getCurrentDisAbsoluteTimestamp()          = 1970-51-20 10:51:03 = 1709463793
+DisTime.getCurrentDisRelativeTimestamp()          = 1970-51-20 10:51:03 = 1709463792
+DisTime.getCurrentDisTimeUnitsSinceTopOfHour()    = 1970-25-10 13:25:31 = 854731896
 
 === modern java.time methods ===
 note that LocalDateTime is current time zone while default Instant is UTC with time zone Z appended
-java.time.LocalDateTime.now(), Instant.now()      = 2022-01-29T11:47:03.889534800, 2022-01-29T19:47:03.889534800Z
-java.time.LocalDateTime.now(), Instant.now()      = 2022-01-29T11:47:03.889534800, 2022-01-29T19:47:03.889534800Z
-java.time.LocalDateTime.now(), Instant.now()      = 2022-01-29T11:47:03.901330100, 2022-01-29T19:47:03.901330100Z
+java.time.LocalDateTime.now(), Instant.now()      = 2022-06-22T21:23:52.867336500, 2022-06-23T04:23:52.868342300Z
+java.time.LocalDateTime.now(), Instant.now()      = 2022-06-22T21:23:52.868342300, 2022-06-23T04:23:52.868342300Z
+java.time.LocalDateTime.now(), Instant.now()      = 2022-06-22T21:23:52.869142700, 2022-06-23T04:23:52.869142700Z
 sleep for 1000 msec...
-java.time.LocalDateTime.now(), Instant.now()      = 2022-01-29T11:47:04.905642300, 2022-01-29T19:47:04.905642300Z
-java.time.LocalDateTime.now(), Instant.now()      = 2022-01-29T11:47:04.905642300, 2022-01-29T19:47:04.905642300Z
-java.time.LocalDateTime.now(), Instant.now()      = 2022-01-29T11:47:04.906143, 2022-01-29T19:47:04.906143Z
+java.time.LocalDateTime.now(), Instant.now()      = 2022-06-22T21:23:53.876364700, 2022-06-23T04:23:53.876758200Z
+java.time.LocalDateTime.now(), Instant.now()      = 2022-06-22T21:23:53.876758200, 2022-06-23T04:23:53.876758200Z
+java.time.LocalDateTime.now(), Instant.now()      = 2022-06-22T21:23:53.876758200, 2022-06-23T04:23:53.876758200Z
 DisTime.hasEpochLvc()                     default = false
 DisTime.setEpochLvc(Instant.now())...
 DisTime.hasEpochLvc(),                            = true
@@ -32,8 +34,13 @@ clearEpochLvc()...
 DisTime.hasEpochLvc()                             = false
 DisTime.setEpochLvcNow()...
 DisTime.hasEpochLvc(),                            = true
-DisTime.getEpochLvc(), Instant.now(), duration    = 2022-01-29T19:47:04.908150200Z, 2022-01-29T19:47:04.908150200Z, 0 msec
+DisTime.getEpochLvc(), Instant.now(), duration    = 2022-06-23T04:23:53.877164600Z, 2022-06-23T04:23:53.877164600Z, 0 msec
 sleep for 1000 msec...
-DisTime.getEpochLvc(), Instant.now(), duration    = 2022-01-29T19:47:04.908150200Z, 2022-01-29T19:47:05.913576500Z, 1005 msec
+DisTime.getEpochLvc(), Instant.now(), duration    = 2022-06-23T04:23:53.877164600Z, 2022-06-23T04:23:54.879450100Z, 1002 msec
+time checks:
+timeSeconds (83 minutes * 60 seconds/minute) = 4980 seconds
+DisTIme.convertToLocalTime(timeSeconds)      = 01:23:00.0
+DisTime.convertToLocalDateTime(timeSeconds)  = 01:23:00.0
+DisTime.convertToInstant(timeSeconds)        = 1970-01-01T01:23:00Z
 *** DisTime.main() self test complete.
 BUILD SUCCESSFUL (total time: 3 seconds)