в пикере установлено только время (не дата) - 0 часов 3 минуты. если предположить что речь идет про пользовательское время 23 декабря 00 часов 03 минуты, то это будет соотстветстовать времени по гринвичу в -2 часа (судя по всему пользователь в часовом поясе +2.00 UTC)
если вместо print(picker.date) в консоль вывести что-нибудь вроде DateFormatter().string(from: picker.date) то оно выведется в локали и часовом поясе симулятора (пользователя)
основное что нужно понять - что без вмешательств в работу компонент, по умолчанию они все работают в локали пользователя. при этом в консоль выводится не время, а его текстовое представление. в системе принятно делать текстовое представление в UTC
вы же не удивляетесь, почему вам вместо красного цвета в консоль выведется что-нибудь вроде r: 1, g: 0, b: 0. это просто то как система интерпретирует данные о цвете. данные о времени она интерпретирует и выводит вам вот в таком виде - в гринвиче