Как преобразовать Java.Util.Date в System.DateTime
В Xamarin.Android вы работаете как с .NET, так и с Java.
Я получаю возвращаемое значение Java.Util.Date, тогда мне нужно ввести то же значение, что и параметр System.DateTime
Вот как я это делаю сейчас
public static DateTime ConvertJavaDateToDateTime(Date date)
{
var a = date.ToGMTString();
var b = date.ToLocaleString();
var c = date.ToString();
DateTime datetime = DateTime.ParseExact(date.ToGMTString(), "dd MMM yyyy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture);
return datetime;
}
Однако в первые 9 дней любого месяца я получаю только 1 цифру за день, а
Функция DateTime.ParseExact ищет dd (т.е. 2 цифры за день).
a - строка со значением "1 сент. 2014 14:32:25 GMT"
b - строка со значением "1 Sep 2014 16:32:25"
c - строка со значением "Mon Sep 01 16:32:25 EET 2014"
Мне хотелось бы найти простое, быстрое, надежное и последовательное решение этой проблемы: D
Ответы
Ответ 1
java.util.Date
имеет метод getTime()
, который возвращает дату как миллисекунду. Значение - миллисекунды с 1 января 1970 года, полночь GMT.
С помощью этого знания вы можете построить System.DateTime
, который соответствует этому значению следующим образом:
public DateTime FromUnixTime(long unixTimeMillis)
{
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return epoch.AddMilliseconds(unixTimeMillis);
}
(метод, взятый из этого ответа)
Ответ 2
Я обновлю свой ответ, так как вы изменили вопрос.
вы можете использовать длинные, чтобы удерживать миллисекунды, а затем конвертировать миллисекунды в тики (x10000) и создать новую DateTime
Date date = new Date();
Long milliseconds = date.getTime();
Long ticks = milliseconds * 10000
DateTime datetime = DateTime(ticks);
Ответ 3
И если вы преуспеете:
public DateTime ConvertDateToDateTime(Date date)
{
SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-DD hh:mm:ss");
String dateFormated = dateFormat.format(date);
return new DateTime(dateFormated);
}
Так оно работает?
(Не понял раньше. Извините =/)
Ответ 4
У меня была эта проблема при аутентификации с Facebook, чтобы получить время истечения срока действия для токена. Решение должно было сделать это:
var convertedTime = new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc).AddMilliseconds(MyJavaUtil.Date.Time);
Ответ 5
It is not tested but try with Calendar methods
public static String ConvertJavaDateToDateTime(Date date)
{
Calendar c = new GregorianCalendar();
c.setTime(date);
System.out.println(c.getTime());
return c.getTime();
}
Prints:
Tue Aug 06 00:00:00 EDT 2013
Ответ 6
You can try with this also
public DateTime dateAndTimeToDateTime(java.sql.Date date, java.sql.Time time) {
String myDate = date + " " + time;
SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss 'GMT'");
java.util.Date utilDate = new java.util.Date();
try {
utilDate = sdf.parse(myDate);
} catch (ParseException pe){
pe.printStackTrace();
}
DateTime dateTime = new DateTime(utilDate);
return dateTime;
}