Я рекомендую использовать DateFormat, например SimpleDateFormat
try {
String timeLong = "2013-02-27 06:06:30";
String timeShort = "16:06 AM";
SimpleDateFormat formatLong = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
SimpleDateFormat formatShort = new SimpleDateFormat("hh:mm aa", Locale.US);
Log.v("out", formatShort.format(formatLong.parse(timeLong)));
Log.v("out", formatShort.format(formatShort.parse(timeShort)));
} catch (ParseException e) {
e.printStackTrace();
}
Я устал сегодня и чувствую, что что-то упустил в этом коде, поэтому я могу изменить его позже, но работает и не вызывает (прямо) устаревший класс Date.
IEnumerable<T> myEnumerable;
Type type = myEnumerable.GetType().GetGenericArguments()[0];
Таким образом,
IEnumerable<string> strings = new List<string>();
Console.WriteLine(strings.GetType().GetGenericArguments()[0]);
печатает System.String
.
См. MSDN для Type.GetGenericArguments
.
Изменить: Я считаю, что это решит проблемы в комментариях:
typeof ( IEnumerable
. GetGenericArguments ()
[0]
вернет первый универсальный аргумент - в данном случае typeof (Foo)
.
Если вы знаете IEnumerable
(через дженерики), тогда подойдет только typeof (T)
. В противном случае (для объекта
или неуниверсального IEnumerable
) проверьте реализованные интерфейсы:
object obj = new string[] { "abc", "def" };
Type type = null;
foreach (Type iType in obj.GetType().GetInterfaces())
{
if (iType.IsGenericType && iType.GetGenericTypeDefinition()
== typeof(IEnumerable<>))
{
type = iType.GetGenericArguments()[0];
break;
}
}
if (type != null) Console.WriteLine(type);
Просто используйте typeof (T)
РЕДАКТИРОВАТЬ: Или используйте .GetType (). GetGenericParameter () для созданного объекта, если у вас нет T.
Большое спасибо за обсуждение. Я использовал его как основу для решения ниже, которое хорошо работает во всех интересующих меня случаях (IEnumerable, производные классы и т. Д.). Подумал, что я должен поделиться здесь, если кому-то это тоже понадобится:
Type GetItemType(object someCollection)
{
var type = someCollection.GetType();
var ienum = type.GetInterface(typeof(IEnumerable<>).Name);
return ienum != null
? ienum.GetGenericArguments()[0]
: null;
}