Convert an ISO 8601 Date String to / from a Native AS3 Date Object

While making some improvements to my ilist metadata (iTunes MPEG4 style metadata) classes I ended up needing to convert an ISO 8601 date and time string to a native AS3 Date object and vice versa.

An ISO 8601 date and time string comes in two flavors, basic and extended. As you can see below, the basic format simply eschews dashes and colons in favor of a more compact syntax.

  • Basic – 20090221T090000Z
  • Extended – 2009-02-21T09:00:00Z

The standard requires a fixed number of digits to represent a date (8 digits) or a time (6 digits). When fewer digits are needed to represent a date / time the number must be padded with leading zeros. The Z at the end of the string designates the UTC “Zulu” timezone (GMT or so called universal time).

I took a quick buzz around the interwebs, but couldn’t find an AS3 lib that could convert one of these strings into a date object or take a date object and have it generate a correctly formatted string, so, you guessed it–I spent my Sunday evening whipping together a utility class that will do the trick (download the source here).

I’m not claiming compliance with every nook and cranny of the spec, but it covers the fundamentals decently. Hand the util an AS3 Date object and you can generate a date, time or date + time in the basic or extended format. You can also parse a basic / extended date, time or date + time string and have an AS3 Date object returned with the appropriate UTC values set on it.

Here’s what the basic usage would look like for a date + time scenario:

// instantiate a ISO8601Util object
 var util:ISO8601Util = new ISO8601Util();
// parse a date + time string into an AS3 Date  - takes either a basic or 
// extended representation         
var date:Date = util.parseDateTimeString( "2009-02-21T09:07:59Z" );
 
// to turn a date into an ISO 8601 date + time representation grab a date object
var currentdate:Date = new Date();
// create a string with the extended or basic format
var extended:String = util.formatExtendedDateTime( currentdate )
var basic:String = util.formatBasicDateTime( currentdate );

Hopefully, I’m now the only poor bastard who has to do this!

Flex Basics – The Script Tag

Grasping the simple things is often the hardest part to getting up and running with Flex. For example, a friend of mine who I’ve been trying to pull over from the dark side (.Net guy) asked, “I’ve got an MXML Application with a button in it that I’d like to bind to a method–where’s the code behind.”

The simple answer of course is to point him to the “script” tag (let’s just forget code behind support was ever added to Flex). Rather than typing up a long winded response I made a quick and dirty Jing video to “show him around” Flex’s script tag (no deep explanation, I’m just teaching by “doing”).
(more…)

Day Three MAXies

The final day of a conference is always brutal. Multiple nights of vendor supplied beer, limited sleep, and a steady river of technical information lead to, well, a sore ass and a limited attention span. Despite this the final day of MAX 08 was solid for moi. Here’s the round up.

I was blown away by the morning session on the Flash Platform’s new text engine. It seems the InDesign team has been hard at work on an AS3 framework called TLF that will be released to labs this Friday. TLF provides enormous framework agnostic (works with Flex or Flash) layout capabilities built on top of Flash Player’s low-level APIs. Very cool stuff that definitely builds on Flash Player’s legend as a cutting edge experience-delivery runtime.

It’s areas like this where you really see the enormous payoff from the Adobe / Macromedia merger. Not many people in the world have the deep typographic and layout knowledge necessary to fully utilize the low level text API’s exposed in Flash Player 10. Adobe, however, has deep roots in type with everything from print drivers, to document formats designed for consistent cross-platform type rendering, to best-of-breed layout tooling. There’s scary potential for the platform when you consider they’ve already delivered Pixel Bender shader effects and are sitting on top of serious video tooling / expertise.

Next I sat in a fantastic Pixel Bender lab put on by the AIF crew. These guys ran the best code oriented lab I’ve ever sat in. I wish I could describe code as clearly and efficiently as these cats–I’d be a code super hero, or an even larger pain in the ass to other developers. Regardless, I should note there’s killer tooling built up around Pixel Bender. A shader language with a code hinting IDE, debugging, breakpoints and export of pbj (bytecode Flash Player 10 runs). Slick stuff–the little girlies over at Adobe should be proud.

I also got to sit in another session on XMP with some silly name like, “Use XMP Metadata to Label, Track, and Manage Assets within Creative Suite.” I’m hoping it was the designerish name that scared everyone off–less than 15 people were in the session. That’s seriously disappointing my fellow meta-nerds. Regardless, Gunar (a Sr. PM with Adobe) gave a super articulate overview of what XMP is, it’s alignment with various industry standards and how it provides tangible benefits throughout the create, edit, publish, deploy and consumption lifecycle. Good stuff that should be mandatory viewing for the lot of you (if only so you can mock my meta fetish).

That’s a wrap for MAX day three. If I get a chance I’ll type up some additional thoughts on the long plane ride home.