It uses LiftRules.dateTimeConverter, which is a factory that by default uses net.liftweb.util.DefaultDateTimeConverter, which is defined as follows (references are to methods in net.liftweb.util.TimeHelpers):
object DefaultDateTimeConverter extends DateTimeConverter {
def formatDateTime(d: Date) = internetDateFormat.format(d)
def formatDate(d: Date) = dateFormat.format(d)
/** Uses Helpers.hourFormat which includes seconds but not time zone */
def formatTime(d: Date) = hourFormat.format(d)
def parseDateTime(s: String) = tryo { internetDateFormat.parse(s) }
def parseDate(s: String) = tryo { dateFormat.parse(s) }
/** Tries Helpers.hourFormat and Helpers.timeFormat */
def parseTime(s: String) = tryo{hourFormat.parse(s)} or tryo{timeFormat.parse(s)}
}
Here is an example of supplying your own:
import java.util.Date
LiftRules.dateTimeConverter.default.set(() => new net.liftweb.util.DateTimeConverter {
def dateTime = {
val sdf = new java.text.SimpleDateFormat("M/d/yy hh:mm a")
sdf.setTimeZone(java.util.TimeZone.getTimeZone("America/New_York"))
sdf.setLenient(true)
sdf
}
def date = {
val sdf = new java.text.SimpleDateFormat("MM/dd/yyyy")
sdf.setTimeZone(java.util.TimeZone.getTimeZone("America/New_York"))
sdf.setLenient(true)
sdf
}
def formatDateTime(d: Date) = dateTime.format(d)
def formatDate(d: Date) = date.format(d)
def formatTime(d: Date) = DefaultDateTimeConverter.formatTime(d)
def parseDateTime(s: String) = Helpers.tryo { dateTime.parse(s) }
def parseDate(s: String) = Helpers.tryo { date.parse(s) }
def parseTime(s: String) = DefaultDateTimeConverter.parseTime(s)
})