【问题标题】:How to convert Java.Util.Date to System.DateTime如何将 Java.Util.Date 转换为 System.DateTime
【发布时间】:2014-08-25 20:06:39
【问题描述】:

在 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 Sep 2014 14:32:25 GMT”的字符串

b 是一个值为“1 Sep 2014 16:32:25”的字符串

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

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

【问题讨论】:

  • date.ToGMTString() 的值究竟是多少?您是否也尝试使用 d 说明符?
  • 你能不能只在 Xamarin 中使用 long 时间戳?
  • @SonerGönül 我已经用更多细节更新了问题,没有尝试仅使用广告,因为我假设它不适用于两位数的日子,例如 10、11 等
  • @chrylis 你能详细说明一下吗?如何使用长时间戳将 java.util.date 转换为 system.datetime
  • @Dv_MH d specifier 表示从131

标签: android datetime


【解决方案1】:

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的方法)

【讨论】:

  • 太棒了,让我试试
  • 我得到一个 System.ArgumentOutOfRangeException: Argument is out of range at the line where i .AddSeconds
  • 我明白了,这可能令人困惑:AddSeconds() 方法当然需要几秒钟,但 getTime() 给你几毫秒。您可以尝试改用epoch.AddMilliseconds() 吗?我将编辑我的答案。
  • :-) 很高兴它有帮助
【解决方案2】:

这样做:

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

   return new DateTime(dateFormated);
}

【讨论】:

  • 无法在 .NET 中使用 Joda Time
  • 看起来棒极了,让我试试吧
【解决方案3】:

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

您可以使用 long 来保存毫秒,然后将毫秒转换为 ticks(x10000) 并创建一个新的 DateTime

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

【讨论】:

  • 我可以,但它是一个可靠且一致的解决方案?
  • 非常感谢,听起来很有希望,让我试试吧
  • 好的,它运行良好,但年份错误,它显示的是年份 {01/09/0045 14:32:25}
  • 这很奇怪。您传递的日期值是多少?另外,你应该看看这些:Ticks per millisecondDateTime
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

    我用过这个:

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

    将时区偏移量合并到我的日期中。

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:
        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
        

        【讨论】:

        • 我需要获取 DateTime 值而不是字符串
        【解决方案8】:
        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;
        }
        

        【讨论】:

          猜你喜欢
          • 2021-02-25
          • 1970-01-01
          • 1970-01-01
          • 2011-08-01
          • 2011-01-27
          • 2021-01-02
          • 2014-02-10
          • 2011-08-29
          • 2019-08-03
          相关资源
          最近更新 更多