VASmalltalk – ICU and its Universal Time Scale

The Universal Time Scale api available in ICU has only three calls:

one call for get meta information about a different time scale unit (Java, .NET, DB2, Mac, Excel)
one call for converting to an external time scale unit
one call to convert from an external time scale unit.

The internal time scale unit for this API is .NET oriented, but with an extended range. as you can see in the example below: it is good, if the programmer is working with UTC oriented DateTimes.

An example. In C# we write

DateTime aDateTime = new DateTime (2013, 1, 1, 0, 0, 0);
var tick = aDateTime.Ticks;

For this example you get the value “634925952000000000” and you transfer this binary value to VASmalltalk, where it is converted back to DateAndTime:

| dotNetTicks icuTicks anUError dateTime |

anUError := UErrorCode new.
  conversion from DOT-NET to the universal time scale in ICU - which is also 
  DOT NET based - therefore you get the	output equal to input. Be careful - 
  this is meant to be UTC time ticks !!!!!!
dotNetTicks := ICUFunctions::UtmScaleFromInt64 
                   callWith: 634925952000000000 
                   with: ICUConstants::UDTS_DOTNET_DATE_TIME 
                   with: anUError.
  now the conversion to ICU time
icuTicks := ICUFunctions::UtmScaleToInt64 
                   callWith: dotNetTicks 
                   with: ICUConstants::UDTS_ICU4C_TIME 
                   with: anUError.

DateAndTime fromICUTicks: icuTicks		

And you get an instance of DateAndTime with the values (2013,1,1,1,0,0) with zone offset of +1.

The API allows conversions from/to: MacOSX, Unix, ICU, Java, Javascript, Extended Unix Time, Excel, DB2, Windows File Time, .NET

This entry was posted in Smalltalk and tagged , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s