Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion HessianCSharp.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@
<Compile Include="hessiancsharp\server\CHessianSkeleton.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="hessiancsharp\util\JavaUtcConverter.cs" />
<Compile Include="hessiancsharp\util\DateTimeConverter.cs" />
<Compile Include="hessiancsharp\webserver\CHessianWebServer.cs" />
<Compile Include="hessiancsharp\webserver\CWebServer.cs">
<SubType>Code</SubType>
Expand Down
34 changes: 17 additions & 17 deletions hessiancsharp/io/CDateDeserializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@

namespace hessiancsharp.io
{
/// <summary>
/// Date - Deserialization.
/// </summary>
public class CDateDeserializer:AbstractDeserializer
{
/// <summary>
/// Date - Deserialization.
/// </summary>
public class CDateDeserializer : AbstractDeserializer
{

#region PUBLIC_METHODS
#region PUBLIC_METHODS
/// <summary>
/// Makes a C# DateTime object from a Java ticks value
/// from java.util.Date.getTime().
Expand All @@ -60,20 +60,20 @@ public class CDateDeserializer:AbstractDeserializer
/// <returns></returns>
public static DateTime MakeCSharpDate(long javaDate)
{
return JavaUtcConverter.ConvertJavaUtcTicksToLocalDateTime(javaDate);
return DateTimeConverter.ConvertJavaUtcTicksToUtcDateTime(javaDate);
}

/// <summary>
/// Reads date
/// </summary>
/// <param name="abstractHessianInput">HessianInput - Instance</param>
/// <returns>DateTime - Instance</returns>
public override object ReadObject(AbstractHessianInput abstractHessianInput)
{
/// <summary>
/// Reads date
/// </summary>
/// <param name="abstractHessianInput">HessianInput - Instance</param>
/// <returns>DateTime - Instance</returns>
public override object ReadObject(AbstractHessianInput abstractHessianInput)
{
long javaTime = abstractHessianInput.ReadUTCDate();
return MakeCSharpDate(javaTime);
}
#endregion
}
#endregion

}
}
}
44 changes: 22 additions & 22 deletions hessiancsharp/io/CDateSerializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,13 @@

namespace hessiancsharp.io
{
/// <summary>
/// Serializing of DateTime - Instances.
/// </summary>
public class CDateSerializer:AbstractSerializer
{
/// <summary>
/// Serializing of DateTime - Instances.
/// </summary>
public class CDateSerializer : AbstractSerializer
{

#region PUBLIC_METHODS
#region PUBLIC_METHODS
/// <summary>
/// Converts a C# DateTime object to a long value
/// that represents the java.util.Date.getTime() value.
Expand All @@ -55,24 +55,24 @@ public class CDateSerializer:AbstractSerializer
/// <returns></returns>
public static long MakeJavaDate(DateTime dt)
{
return JavaUtcConverter.ConvertLocalDateTimeToJavaUtcTicks(dt);
return DateTimeConverter.ConvertUtcDateTimeToJavaUtcTicks(dt);
}

/// <summary>
/// Writes Instance of the DateTime class
/// </summary>
/// <param name="objDate">Instance of the DateTime class</param>
/// <param name="abstractHessianOutput">HessianOutput - Stream</param>
public override void WriteObject(Object objDate, AbstractHessianOutput abstractHessianOutput)
{
if (objDate == null)
abstractHessianOutput.WriteNull();
else
{
/// <summary>
/// Writes Instance of the DateTime class
/// </summary>
/// <param name="objDate">Instance of the DateTime class</param>
/// <param name="abstractHessianOutput">HessianOutput - Stream</param>
public override void WriteObject(Object objDate, AbstractHessianOutput abstractHessianOutput)
{
if (objDate == null)
abstractHessianOutput.WriteNull();
else
{
abstractHessianOutput.WriteUTCDate(MakeJavaDate((DateTime)objDate));
}
}
#endregion
}
}
#endregion

}
}
}
75 changes: 75 additions & 0 deletions hessiancsharp/util/DateTimeConverter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
*****************************************************************************************************
* HessianCharp - The .Net implementation of the Hessian Binary Web Service Protocol (www.caucho.com)
* Copyright (C) 2004-2005 by D. Minich, V. Byelyenkiy, A. Voltmann, M. Wuttke
* http://www.hessiancsharp.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* You can find the GNU Lesser General Public here
* http://www.gnu.org/licenses/lgpl.html
* or in the license.txt file in your source directory.
******************************************************************************************************
* You can find all contact information on http://www.hessiancsharp.com
******************************************************************************************************
*
*
******************************************************************************************************
* 2011-03-31 First version; wuttke
* 2014-04-25 Gilles Meyer <[email protected]>
* Prefer UTC DateTime over LocalTime as internal DateTime representation.
* Leave the consumer free to interpret the DateTime as he wishes afterward.
******************************************************************************************************
*/

using System;

namespace hessiancsharp.util
{

/// <summary>
/// Convert milliseconds since epoch defined by the hessian protocol
/// (Java convention) into C# UTC DateTime object and vice-versa.
/// </summary>
public class DateTimeConverter
{
// Offset in milliseconds between Hessian date time reference (January 1, 1970, 00:00:00 UTC)
// and C# date time reference (January 1, 0001 at 00:00:00.000)
private const long CSharpRefHessianRefOffsetMillis = 62135596800000;

// One millisecond equals 10^4 x 100 nanoseconds
// This is used to go from Hessian millisecond resolution to C# 100-nanosecond resolution and vice versa.
private const long MillisInHundredNanos = 10000;

/// <summary>
/// Convert C#-UTC-DateTime Object to Java-UTC-Ticks
/// </summary>
public static long ConvertUtcDateTimeToJavaUtcTicks(DateTime dt)
{
long utcJavaTicks = dt.Ticks / MillisInHundredNanos - CSharpRefHessianRefOffsetMillis;
return utcJavaTicks;
}

/// <summary>
/// Convert Java-UTC-Ticks into a C#-UTC-DateTime Object.
/// </summary>
public static DateTime ConvertJavaUtcTicksToUtcDateTime(long utcTicks)
{
long ticks = (utcTicks + CSharpRefHessianRefOffsetMillis) * MillisInHundredNanos;
return new DateTime(ticks, DateTimeKind.Utc);
}

}
}
Loading