You can’t. Firmwares never really did timezones and virtual machines never did clocks.
On a physical system, you have a clock crystal combined with a chip that keeps track of time.
This can then get altered by the user through the BIOS screens or from the OS.
Unless you remove the battery keeping it ticking, time keeps progressing even with the system off.
There’s no such thing with virtual machines. With VMs, instead, the hypervisor (QEMU) sets up the virtual timer on startup, aligning it with the host system. Because Linux normally tracks its physical time without timezones (UTC), then that’s what gets pushed to the VM on startup.
Apparently Windows stores the region specific time rather than use UTC and applying an offset, which then causes this issue.
There’s apparently a Windows registry key called RealTimeIsUniversal which can be set to 1 so Windows knows that the hardware clock is UTC.