subprocess.call () обычно принимает список строк в качестве первого аргумента. Если вы передадите ей строку X (как вы это делаете), она будет преобразована в список с этой всей строкой в качестве первого аргумента.
Первый элемент этого списка выполняется с остальной частью этого списка в качестве аргументов.
Поэтому базовая ОС пытается выполнить исполняемый файл 'date -s "XXYYXXZ"' и не может его найти.
Это отличается от os.system (), который передает параметр оболочке, которая чаще всего разбивает полученную строку на пробелы, а затем выполняет первый разделенный элемент.
Попытка:
command = ['date', '-s"' + time.ctime(val) + '"']
subprocess.call(command)
как две последние строки.