Sometimes the best answers are the simplest.

Umbraco has two really useful little fields - "Publish at" and "Unpublish at" - that are properties for every node. They're used for automatically pushing content into (or out of, respectively) Umbraco's XML cache, in /App_Data/umbraco.config.

However, these properties, unlike a node's created and last-updated dates (/@createDate and /@updateDate with XSLT), are not stored in the XML cache itself. So if you want to leverage it with XSLT, you have to resort to writing two very simple helper methods like so:

public static string ReleaseDate(int nodeId) {
    Document d = new Document(nodeId);
    return d.ReleaseDate.ToString ();
}
public static string ExpireDate(int nodeId) {
    Document d = new Document(nodeId);
    return d.ExpireDate.ToString ();
}

The publish and unpublish dates will automatically clear themselves after the publish/unpublish event is raised accordingly. So this could be useful for a countdown, say, "x days until competition opens/closes" or whatever, but not advised for general usage.

Hope it helps!