Here's your function using a tm struct.
I did not test it, but all your original code needed was hh, mm and ss.
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
int hh = timeinfo.tm_hour; // 24-hour format
int mm = timeinfo.tm_min;
int ss = timeinfo.tm_sec;
// Convert hour to 12-hour format and map to pixel ring
unsigned char hourPos = ((hh % 12) * 5 + (mm + 6) / 12);
Ring.setPixelColor((hourPos + 59) % 60, Ring.Color(255, 0, 0)); // red blur left
Ring.setPixelColor((hourPos) % 60, Ring.Color(255, 0, 0)); // red center
Ring.setPixelColor((hourPos + 1) % 60, Ring.Color(255, 0, 0)); // red blur right
Ring.setPixelColor(mm % 60, Ring.Color(0, 255, 0)); // green minute
Ring.setPixelColor(ss % 60, Ring.Color(0, 0, 255)); // blue second
Ring.show();
}
HTH
a7