Vous devez donner une date aussi. Dans le cas où la zone a l'heure d'été (DST), par exemple, cela est nécessaire pour appliquer le décalage correct (je ne sais pas si São Paulo utilise l'heure d'été, mais Java exige toujours une date).
Et encore cela prend un pas de plus que ce que vous pourriez vous attendre, mais c'est assez simple une fois que vous savez comment. Pour le cas de la démonstration, j'ai supposé que vous vouliez dire 15:00 aujourd'hui, ce que vous avez à peine fait, mais je vous fais confiance pour remplir vous-même la date souhaitée.
LocalTime time = LocalTime.of(15, 0);
LocalTime utcTime = LocalDateTime.of(LocalDate.now(), time)
.atZone(ZoneId.of("America/Sao_Paulo"))
.withZoneSameInstant(ZoneOffset.UTC)
.toLocalTime();
System.out.println(utcTime);
Cette imprime le résultat que vous aussi demandé
18:00
Vous devez donner une date aussi. Dans le cas où la zone a l'heure d'été (DST), par exemple, cela est nécessaire pour appliquer le décalage correct. –