Choose Language Hide Translation Bar
Level III

How to access System Preferences in JSL, specifically the date format setting

I've searched around and haven't found any simple way to get System Preferences settings from within JSL.  I'm developing on a Mac – (JMP 14 & 15) – but would also like to know how to do this on Windows.  The closest I got was a discussion on how to get the language code:


System Service( Get Language Code );

System Service sounds like and interesting function, but I couldn't find any documentation on it.  I'm looking for a general solution but am immediately interested in finding the date format, (per setting in System Preferences ➔ Language & Region ➔ Advanced... ➔ Dates ➔ Short), as shown below:


Screen Shot 2020-07-20 at 5.55.13 PM.png

The Short date delimiters are normally set to slashes by default, but were modified by me to dashes in the image above.  The specific issue I find with changing this setting is that it affects what arguments are valid to the Input Format function.  For example, the following statement will generate a runtime error:


col << Input Format( "y/m/d h:m:s" );

So the code must instead look like:

col << Input Format( "y-m-d h:m:s" );

And the reverse it true if the user has their System Preferences set to slashes.  Furthermore, with the Format function, if the wrong date string is given, there won't be a runtime error, but the relevant datetime column will ignore the format setting, and the data will be left in its raw, unintelligible form.


Thus, the set of valid arguments are dependent on the user's setting, and the code must first read this setting to determine which format to use.


As a workaround, I was able to collect the settings information from a system Unix command and parse it accordingly:


// implement Unix command:
// $ defaults read DateCellWidthCache | grep M.d.yy

Clear Log();    

// read System Preferences from 'defaults' that contains date format string.
sDefaults = Run Program( 
	Executable( "/usr/bin/defaults" ),
	Options( { "read", "", "DateCellWidthCache" } ),
	Read Function( "text" )
//Write( sDefaults );

ss1 = Munger( sDefaults, 1, "M/d/yy" );  // check for slash style.
ss2 = Munger( sDefaults, 1, "M-d-yy" );  // check for dash style.
Show( ss1, ss2 ); Write("\!n");
If( ss1 > 0,
	Write( "Using slashes.\!n");
/* else if */ ss2 > 0,
	Write( "Using dashes.\!n");
/* else */	
	Write( "***ERROR: unrecognized date delimiter.\!n");
	Write( "defaults read DateCellWidthCache:\!n");
	Write( sDefaults );

However, this seems a bit clumsy, and I imagine there's a simpler way.  It's apparent that the JMP engine can read this setting as it presents a very different set of time formats in the Column Properties dialog based on this setting, as shown below (presenting only the dash options here):


Screen Shot 2020-07-20 at 6.30.49 PM.png

So, my question is:  Is there a simple way to get arbitrary System Preferences values (and the date format specifically) by using System Service or some other function?


Staff (Retired)

Re: How to access System Preferences in JSL, specifically the date format setting

Article Labels