TODAY() is just an alias for DATE() which returns a date value (number of days) not a datetime value (number of seconds).
To get the current datetime value use DATETIME() function instead of DATE() function. To have the string formatted properly use at least a width of 19 in the format specification, otherwise you will get only two digits for the year.
%let dt1= %sysfunc(intnx(dtday,%sysfunc(datetime()),-1,s),datetime19.);
To get the current time of day (seconds since midnight) use the TIME() function. To format it with leading zeros use the TOD format.