Как преобразовать 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;
}