Просто используйте следующий шаблон, чтобы получить ожидаемый результат:
try {
String time = "06:06:30";
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
Date dt = sdf.parse(time);
SimpleDateFormat sdfs = new SimpleDateFormat("hh:mm a");
String formatedTime = sdfs.format(dt);
Log.v("parseTime", formatedTime);
} catch (ParseException e) {
e.printStackTrace();
}
Удачного кодирования:)
Вот решение, которое я использовал для своего проекта. Решение оказалось безупречным.
Система использует объекты событий отмены, где каждое событие отмены знает, как отменять и восстанавливать само себя.
interface IUndoEvent
{
void Undo();
void Redo();
}
Я смог построить систему, реализовав только 2 события отмены: одно для изменения собственности; один для изменений коллекции.
Идея состоит в том, что эти события реализуют Undo / Redo путем непосредственного изменения модели.
class PropertyChangeUndoEvent : IUndoEvent
{
private ModelBase _target;
private string _propertyName;
private object _oldValue;
private object _newValue;
public PropertyChangeUndoEvent(ModelBase target, string propertyName, object oldValue, object newValue)
{
_target = target;
_propertyName = propertyName;
_oldValue = oldValue;
_newValue = newValue;
}
public void Undo()
{
SetValue(_oldValue);
}
public void Redo()
{
SetValue(_newValue);
}
private void SetValue(object value)
{
// Set Value on the _target using reflection (_propertyName)
}
}
ViewModel заботится о создании событий отмены, вызывая функции ViewModelBase:
class MyViewModel : ViewModelBase
{
public string Name
{
get { return _model.Name; }
// The SetValue will create a undo event, and push it to the UndoManager
set { SetValue(_model, "Name", value); }
}
}
Наконец, есть UndoManager (синглтон проекта), в котором хранятся стек отмены и стек повтора.
Я полагаю, вы связываете шаблон Command с Memento?
Я бы подумал, что система отмены будет как бы интегрирована в уровень ViewModel, поскольку это состояние пользовательского интерфейса.
?! Обычно отмена / возврат действует на бизнес-объекты, а пользовательский интерфейс отражает бизнес-уровень.
Допустим, у нас есть класс продукта со строкой «Описание». ProductVM предоставляет строковое свойство, которое вызывает PropertyChanged. При модификации сувенир сохраняет экземпляр старой модели. Если вы отмените действие, восстановите сувенир с помощью ProductVM.Description = (memento as Product) .Description: модель будет обновлена, и пользовательский интерфейс тоже.
NB: избегайте (memento as Product) , просто для образца;)