在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
答案 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;
}