Исправлено, чтобы объединить миллисекунды с секундами.
Вы указали «эффективный», и я считаю, что это на два порядка быстрее, чем DateList
:
stringDynP[s_String, p_] :=
StringTake[s, Thread@{{0}~Join~Most@# + 1, #} &@Accumulate@p]
toDateList[string_String] :=
MapAt[#/1000` &, #, -1] &[
FromDigits /@ stringDynP[string, {4, 2, 2, 2, 2, 5}]
]
toDateList["20110103224832494"]
{2011, 1, 3, 22, 48, 32.494}
stringDynP
- это строковая адаптация моей функции "Динамическое разбиение" .
Предупреждение для пользователей Mathematica 7 : метод DateList
дает ложный результат:
{2011, 1, 12, 9, 23, 24.094}
Предположительно в версии 8 может использоваться следующий метод:
DateList[
{"20110103224832494",
{"Year", "Month", "Day", "Hour","Minute", "Second", "Millisecond"}},
DateDelimiters -> None
]