如何将Java.Util.Date转换为System.DateTime

时间:2014-07-04 13:05:21

标签: android 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是一个值为“2014年9月1日14:32:25 GMT”的字符串

b是一个值为“2014年9月1日16:32:25”的字符串

c是一个字符串,其值为“Mon Sep 01 16:32:25 EET 2014”

我希望我能为这个问题找到一个简单,快速,可靠和一致的解决方案:D

8 个答案:

答案 0 :(得分:12)

java.util.Date有一个getTime()方法,它以毫秒值的形式返回日期。该值是自1970年1月1日格林威治标准时间午夜以来的毫秒数。

有了这些知识,你可以构建一个System.DateTime,它匹配这个值,如下所示:

public DateTime FromUnixTime(long unixTimeMillis)
{
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return epoch.AddMilliseconds(unixTimeMillis);
}

(取自this answer

的方法

答案 1 :(得分:0)

我会更新我的答案,因为你已经改变了问题。

您可以使用long来保持毫秒,然后将毫秒转换为刻度(x10000)并创建新的DateTime

Date date = new Date();
Long milliseconds = date.getTime();
Long ticks = milliseconds * 10000
DateTime datetime = DateTime(ticks);

答案 2 :(得分:0)

这样做:

public DateTime ConvertDateToDateTime(Date date)
{
    SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd hh:mm:ss");
    String dateFormated = dateFormat.format(date);

   return new DateTime(dateFormated);
}

答案 3 :(得分:0)

在使用Facebook进行身份验证以接收令牌的过期时间时遇到此问题。解决方案是这样做:

var convertedTime = new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc).AddMilliseconds(MyJavaUtil.Date.Time);

答案 4 :(得分:0)

我用了这个:

DateTimeOffset.FromUnixTimeMilliseconds(date.Time - (date.TimezoneOffset * 60 * 1000)).DateTime;

要将时区偏移量纳入我的日期。

答案 5 :(得分:0)

就我而言,只有此代码可以正常工作:

public static DateTime NativeDateToDateTime(Java.Util.Date date)
{ 
    SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
    string dateFormated = dateFormat.Format(date);
    
    return DateTimeOffset.Parse(dateFormated, null, DateTimeStyles.None).DateTime; 
}

答案 6 :(得分:-1)

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

答案 7 :(得分:-1)

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;
}