Cómo convertir Java.Util.Date a System.DateTime
En Xamarin.Android, trabaja con .NET y Java.
Obtengo un valor devuelto de Java.Util.Date, entonces necesito introducir ese mismo valor como un parámetro que sólo toma System.DateTime
- Convertir una cadena de fecha en milisegundos en java
- ¿Cómo dormir hilo en Xamarin android y ios?
- Android: ejemplo de getRelativeTime
- ¿Cómo puedo obtener la fecha y la hora del proveedor de la red?
- Fecha de EditarTexto
Así es como lo hago actualmente
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; }
Sin embargo, en los primeros 9 días de cualquier mes, sólo obtengo 1 dígito para el día y la función DateTime.ParseExact está buscando dd (es decir, 2 dígitos para el día).
A es una cadena con valor "1 Sep 2014 14:32:25 GMT"
B es una cadena con valor "1 sep 2014 16:32:25"
C es una cadena con valor "Mon Sep 01 16:32:25 EET 2014"
Deseo que podría encontrar una solución simple, rápida, confiable y constante para este problema: D
- Obtener diferencia de tiempo en android?
- ¿Convertir fechas enteras / épocas a la marca de tiempo de unix en Java?
- ¿Cómo conseguir mes y día en android?
- Cómo construir una fecha de una cadena
- Mostrar la fecha / hora UTC en la fecha / hora de acuerdo con la zona horaria actual
- Android - Error al conectar con URI de inicio de sesión
- Uso de fechas con la biblioteca Graphview
- Json DateTime Parsing en Android
java.util.Date
tiene un método getTime()
, que devuelve la fecha como un valor de milisegundos. El valor es el número de milisegundos desde el 1 de enero de 1970, medianoche GMT.
Con ese conocimiento, puede construir un System.DateTime
, que coincida con este valor de la siguiente manera:
public DateTime FromUnixTime(long unixTimeMillis) { var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); return epoch.AddMilliseconds(unixTimeMillis); }
(Método tomado de esta respuesta )
Actualizaré mi respuesta, ya que has cambiado la pregunta.
Puede usar un largo para mantener los milisegundos y convertir los milisegundos en tics (x10000) y crear un nuevo DateTime
Date date = new Date(); Long milliseconds = date.getTime(); Long ticks = milliseconds * 10000 DateTime datetime = DateTime(ticks);
Y si lo haces bien:
public DateTime ConvertDateToDateTime(Date date) { SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-DD hh:mm:ss"); String dateFormated = dateFormat.format(date); return new DateTime(dateFormated); }
¿Así que funciona?
(No lo había entendido antes.) Lo siento = /)
Tuve este problema al autenticar con Facebook para recibir el tiempo de caducidad para el token. La solución fue hacer esto:
var convertedTime = new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc).AddMilliseconds(MyJavaUtil.Date.Time);
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
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; }
- Creación de un RecyclerView ampliable
- Enfoque para rellenar la vista de lista expandible con la base de datos SQlite local