As others replied, this is the expected behavior.  However, I also had
the need to make sure the date object was not changed due to different
timezones of the client and server.  There is another thread, I don't
have a link to it handy but you could search for something like "date
serialization", where it was suggested to replace the gwt default date
serialization logic.  That is what I did.
Warning, you need to compile the GWT java libraries yourself and this
change affects all Date serialization.  Since that is what I wanted, I
didn't look for a more refined method that I could be applies to only
specific dates.  Here is what I replaced:
The following file is in the user/src directory of the gwt source
tree.
Good luck,
Chris....
================================================================
package com.google.gwt.user.client.rpc.core.java.util;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.client.rpc.SerializationStreamReader;
import com.google.gwt.user.client.rpc.SerializationStreamWriter;
import java.util.Date;
/**
 * Custom field serializer for {@link java.util.Date}.
 */
public final class Date_CustomFieldSerializer {
  public static void deserialize(SerializationStreamReader
streamReader,
      Date instance) {
    // No fields
  }
  public static Date instantiate(SerializationStreamReader
streamReader)
      throws SerializationException {
//    return new Date(streamReader.readLong());
    return new
Date(streamReader.readInt(),streamReader.readInt(),streamReader.readInt(),streamReader.readInt(),streamReader.readInt());
  }
  public static void serialize(SerializationStreamWriter streamWriter,
      Date instance) throws SerializationException {
//    streamWriter.writeLong(instance.getTime());
    streamWriter.writeInt(instance.getYear());
    streamWriter.writeInt(instance.getMonth());
    streamWriter.writeInt(instance.getDate());
    streamWriter.writeInt(instance.getHours());
    streamWriter.writeInt(instance.getMinutes());
  }
}