【问题标题】:Passing DateTime between C# and Java?在 C# 和 Java 之间传递 DateTime?
【发布时间】:2017-03-28 06:38:13
【问题描述】:

我有两个网站,一个是 C#.NET,另一个是 Java。我需要在 C# 中创建一个 DateTime 对象,对其进行序列化,并将其附加到 Java 站点可以理解的 URL。

我知道我应该使用 UTC 时间来执行此操作。至于在 C# 中序列化 DateTime 并在 Java 中反序列化,最好的“存储”格式是什么?

我在想我应该在 C# 中使用类似刻度的东西,但我不确定 Java 是否支持该功能。

【问题讨论】:

  • json、字符串、日期和日期格式
  • Date class 在 java 中接受刻度作为构造函数中的参数。然而,这不是唯一可用的选项。
  • 如果将其序列化为 ISO 字符串,几乎所有语言(包括 Java)都应该能够解析它。

标签: java c# datetime


【解决方案1】:

我认为您可以使用此 Java 类中的转换在 .NET 滴答(自魔法时间起 100 纳秒)和 Java 滴答(距另一时间起的毫秒)之间进行转换:

public class DateTime 
{
    static private long TICKS_AT_EPOCH = 621355968000000000L;

    long ticks;

    public DateTime(long t) {
        ticks = t;
    }

    public DateTime(Date date) {
        ticks = TICKS_AT_EPOCH + 10000 * date.getTime();
    }

    public long Ticks()  { return ticks; }

    static public DateTime fromJavaMillis(long millis)
    {
        return new DateTime(TICKS_AT_EPOCH + 10000 * millis);
    }

    public Date ToDate()
    {
        return new Date((ticks-TICKS_AT_EPOCH)/10000);
    }
}

注意 - 我确信我可能很久以前在互联网上的某个地方发现过 - 所以感谢创始人:)。

然后你可以只使用这个的刻度来序列化 - 它可以直接在另一边构造一个 .NET DateTime。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    相关资源
    最近更新 更多