Hi @Marcel den Ouden 

I did something similar a few years back for an ISC internal project.
I required 2 tables to achieve this
- mapping of the location to timezone code  (geographic coordinates are often misleading, STATIC)
- rules and offset from UTC (daylight Saving Y/N, the window when to apply,...) might be flexible
- $ZTZ is your friend and the Docs are really excellent also for special cases

A further complication is mobile use.
example:
- You go to Summit in Seattle. (UTC-7)
- you need to arrange a concall with a customer in Amsterdam (UTC+2) (CEST!)
- and meeting in Nov. (UTC+1)  back to normal time
- And you need to know the time zone used by your notebook (local or home or other?)

For the notebook, I used some JavaScript as the app was written in ZEN (10 yrs.back)
and it was mine and I could control it.
see more in my Article Global Time Management


 

I took a look into Caché 2018.
%DisplayFormatted is still useless for your case.

It calls the method %Display() which allows having a different delimiter:
It just doesn't use or support it. It is forgotten until today.
So default $C(9) "TAB" is used.
You may need to open the output file yourself and then 
use it with a %Next Loop writing it line by line. 
So you may also control your headers.

It looks like this method was not foreseen to be used in real applications.
 

From your description, it is obvious that you write ALL global streams just to default ^CacheStream.

To separate them you may set individual Globals for streaming (e.g depending on use-case)

Class %Library.GlobalBinaryStream has this parameter + property:

/// Default location: can be overridden at run-time
Parameter STOREGLOBALNAME = "^CacheStream"; /// Root is Global Location (name and top subscripts)

Property StoreRoot As %String(MAXLEN = 5000) [ InitialExpression = {..#STOREGLOBALNAME}, Private ]; Property rollback As %String [ MultiDimensional, Private ];


You can change this default using the method
Method %LocationSet(value As %String) As %Status
{
 Do ..Clear()
 Set ..StoreRoot=value,i%%Location=value
 Quit $$$OK
}