Long term, it seems like these functions could change to receiving some extra arguments:

```c
uint8_t* timezone_out, const size_t timezone_capacity, size_t* timezone_written_len
```

so the Rust code creates space for the zone, and passes in the pointer and capacity, then this function writes out the length that was actually written. (this also allows us to be slightly more efficient on the Rust side by using an on-stack `[u8, .. 64]`, and only allocating when we know exactly how long the time zone string is. */me prematurely optimises*.