If you have started working with Service Now and the API, and started creating Changes with Times and Dates in them. Have you noticed the times are off in your changes, but the time is right in the script. This was a bit of a head scratches for a few, until it dawned on me to think about timezone. Beings for me every script was 6 hours off. So that made me think to write this.
Service Now Date Formats
| Field | Full Form | Short Form |
| Year | yyyy (4 digits) | yy (2 digits, y (2 or 4 digits) |
| Month | MMM (name or abbr.) | MM (2 digits, M (1 or 2 digits) |
| Day of Month | dd (2 digits) | d (1 or digits) |
Service Now Time Formats
| Field | Full Form | Short Form |
| Hour (1-12) | hh (2 digits) | h (1 or 2 digits) |
| Hour (0-23) | HH (2 digits) | H (1 or 2 digits) |
| Minute | mm 2(digits) | m (1 or 2 digits) |
| Second | ss (2 digits) | s (1 or 2 digits) |
By default service now uses the time format of:
yyyy-MM-dd HH:mm:ss
The time field only accepts String response so you must convert the time to a String.
When using PowerShell to typically you would do something like this:
(Get-Date).ToString(‘yyyy-MM-dd HH:mm:ss’)
But beings we are 6 hours off we have to do a bit outside of the box. For our environment we are set to UTC time for scripting but from my understanding is you can change this.
Here is my work around for this issue.
(Get-Date).AddHours(6).ToString(‘yyyy-MM-dd HH:mm:ss’)
You can use the AddHour to adjust time as needed, or you can use a variable to adjust as needed. Or the best option is to convert the time to UTC using the method: ToUniversalTime()
(Get-Date).ToUniversalTime().ToString(‘yyyy-MM-dd HH:mm:ss’)
By using this you don’t have to mess with adjusting with daylight savings time BS.
Hope this helps going forward.

