Advertisement
BugFix

Time Stamp

Mar 19th, 2019
1,226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Nim 3.66 KB | None | 0 0
  1. import strutils, times, re
  2.  
  3. #------------------------------------------------------------------------------
  4. # nowDateTime  gets current time/date as tuple with following fields:
  5. #              .year .year2digit .month .mday .hour .min .sec .milli .micro .nano
  6. #------------------------------------------------------------------------------
  7. proc nowDateTime(): tuple =
  8.   let
  9.     startFloat = epochTime()
  10.     startStr = startFloat.formatFloat(precision = 32)
  11.     subSecStr = startStr.split(".")[^1]
  12.     ms = subSecStr[0 .. 2]
  13.     mics = subSecStr[0 .. 5]
  14.     ns = subSecStr[0 .. 8]
  15.     datetime = $now()        
  16.   var aDt: array[7, string]
  17.   if datetime.find(re"(\d\d)(\d\d)-(\d+)-(\d+)T(\d+):(\d+):(\d+).+", aDt) != -1:
  18.     let dt: tuple[year, year2digit, month, mday, hour, min, sec, milli, micro, nano: string] =
  19.       (aDt[0] & aDt[1], aDt[1], aDt[2], aDt[3], aDt[4], aDt[5], aDt[6], ms, mics, ns)
  20.     return dt
  21.   else:
  22.     return ("", "", "", "", "", "", "", "", "", "")
  23. #------------------------------------------------------------------------------
  24.  
  25.  
  26. #------------------------------------------------------------------------------
  27. # timeStamp  Gets the time stamp for the current date and/or time.
  28. #            The date can be userformatted by given format string, default: YYYY-MM-dd. Usable shorts:
  29. #            "YYYY"-4 digit year, "YY"-2 digit year, "MM"- month, "dd"- day of month  
  30. #            The time can get more detailed with "partSeconds", by default none parts: hh:mm:ss.
  31. #            Parts are: "milli", "micro", "nano"
  32. # Note:      You can use backslashes in "formDate" as raw string, it will output in the same way (i.e. r"MM\YY" --> "03\19")
  33. #------------------------------------------------------------------------------
  34. proc timeStamp(partSeconds: string = "", onlyTime: bool = false, formDate: string = "YYYY-MM-dd"): string =
  35.   let dt = nowDateTime()
  36.   var aForm: array[7, string] = [dt.year, dt.month, dt.mday, dt.hour, dt.min, dt.sec, ""]
  37.   var aSep: array[1, string]
  38.   var frmDate: string = formDate
  39.   if frmDate.find(re"\\[^\\]") != -1: frmDate = frmDate.replace(re"\\", r"\\")
  40.   if frmDate.find(re"(\W)", aSep) != -1:
  41.     let sPart = frmDate.split(aSep[0])
  42.     for part in sPart:
  43.       case part:
  44.       of "YY":
  45.         aForm[0] = dt.year2digit
  46.       else:
  47.         discard
  48.     frmDate = frmDate.replace(re"YYYY", "$1").replace(re"YY", "$1").replace(re"MM", "$2").replace(re"dd", "$3")
  49.     if frmDate.find(re"\\\\") != -1: frmDate = frmDate.replace(re"\\\\", r"\")
  50.  
  51.    var formStr = frmDate & " $4:$5:$6"
  52.    if onlyTime: formStr = "$4:$5:$6"
  53.    if partSeconds != "":
  54.      formStr.add(".$7")
  55.      case partSeconds:
  56.      of "milli":
  57.        aForm[6] = dt.milli
  58.      of "micro":
  59.        aForm[6] = dt.micro
  60.      of "nano":
  61.        aForm[6] = dt.nano
  62.      else:
  63.        discard
  64.  
  65.    return formStr % aForm
  66.    
  67.  else:
  68.    return ""
  69. #------------------------------------------------------------------------------
  70.  
  71. echo "Date and Time (default):       ", timeStamp()
  72. echo r"Date formatted dd\M):          ", timeStamp(formDate = r"dd\MM")
  73. echo "Date formatted [dd.MM.YYYY]:   ", timeStamp(formDate = "[dd.MM.YYYY]")
  74. echo "Time only, part: miliseconds   ", timeStamp("milli", true)
  75. echo "Time only, part: microseconds  ", timeStamp("micro", true)
  76. echo "Time only, part: nanoseconds   ", timeStamp("nano", true)
  77.  
  78. #[ output:
  79.  
  80. Date and Time (default):       2019-03-19 17:46:01
  81. Date formatted dd\M):          19\03 17:46:01
  82. Date formatted [dd.MM.YYYY]:   [19.03.2019] 17:46:01
  83. Time only, part: miliseconds   17:46:01.827
  84. Time only, part: microseconds  17:46:01.828702
  85. Time only, part: nanoseconds   17:46:01.828702700
  86.  
  87. ]#
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement