@@ -400,4 +400,28 @@ public void TraceAndSpanAreIncludedWhenPresent()
400400 formatter . Format ( evt , sw ) ;
401401 Assert . Equal ( $ "{ traceId } /{ spanId } ", sw . ToString ( ) ) ;
402402 }
403+
404+ [ Fact ]
405+ public void TimestampTokenRendersLocalTime ( )
406+ {
407+ var logTimestampWithTimeZoneOffset = DateTimeOffset . Parse ( "2024-09-03T14:15:16.079+02:00" , CultureInfo . InvariantCulture ) ;
408+ var formatter = new OutputTemplateRenderer ( ConsoleTheme . None , "{Timestamp:yyyy-MM-dd HH:mm:ss}" , CultureInfo . InvariantCulture ) ;
409+ var evt = new LogEvent ( logTimestampWithTimeZoneOffset , LogEventLevel . Information , null , MessageTemplate . Empty , Array . Empty < LogEventProperty > ( ) ) ;
410+ var sw = new StringWriter ( ) ;
411+ formatter . Format ( evt , sw ) ;
412+ // expect time in local time, unchanged from the input, the +02:00 offset should not affect the output
413+ Assert . Equal ( "2024-09-03 14:15:16" , sw . ToString ( ) ) ;
414+ }
415+
416+ [ Fact ]
417+ public void UtcTimestampTokenRendersUtcTime ( )
418+ {
419+ var logTimestampWithTimeZoneOffset = DateTimeOffset . Parse ( "2024-09-03T14:15:16.079+02:00" , CultureInfo . InvariantCulture ) ;
420+ var formatter = new OutputTemplateRenderer ( ConsoleTheme . None , "{UtcTimestamp:yyyy-MM-dd HH:mm:ss}" , CultureInfo . InvariantCulture ) ;
421+ var evt = new LogEvent ( logTimestampWithTimeZoneOffset , LogEventLevel . Information , null , MessageTemplate . Empty , Array . Empty < LogEventProperty > ( ) ) ;
422+ var sw = new StringWriter ( ) ;
423+ formatter . Format ( evt , sw ) ;
424+ // expect time in UTC, the +02:00 offset must be applied to adjust the hour
425+ Assert . Equal ( "2024-09-03 12:15:16" , sw . ToString ( ) ) ;
426+ }
403427}
0 commit comments