We store millions of timestamps and their timezones in our Cassandra cluster per day.
Our recommended practice is to store timestamps as two values:
- Store the timestamp itself as a timestamp type or bigint and always align it to UTC (we use .NET datetimes, which start from year zero and not the UNIX epoch, so we have to use bigint.)
- Store the UTC offset as a bigint, in microseconds
That way all of our timestamps are, by default, using the same timezone across the board. However, whenever we need to do something in local time we can just fetch the UTC offset column and subtract it from the timestamp in order to get local time.