Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将DateTimeOffset从Android发送到.NET Web API_Java_Android_Gson_Azure Mobile Services_Datetimeoffset - Fatal编程技术网

Java 将DateTimeOffset从Android发送到.NET Web API

Java 将DateTimeOffset从Android发送到.NET Web API,java,android,gson,azure-mobile-services,datetimeoffset,Java,Android,Gson,Azure Mobile Services,Datetimeoffset,我正在使用适用于Android的Azure移动应用程序SDK public class MyClass { public String Id; public String Code; public DateTimeOffset ClientCreatedAt; } MyClass myClass = new MyClass(); myClass.Id = "1234567890"; myClass.Code = "dfgdrvyet"; myClass.ClientCr

我正在使用适用于Android的Azure移动应用程序SDK

public class MyClass {
    public String Id;
    public String Code;
    public DateTimeOffset ClientCreatedAt;
}

MyClass myClass = new MyClass();
myClass.Id = "1234567890";
myClass.Code = "dfgdrvyet";
myClass.ClientCreatedAt = new DateTimeOffset(new Date());
它的用途如下:

MobileServiceSyncTable<MyClass> myClassSyncTable = _client.getSyncTable(MyClass.class);
ListenableFuture<MyClass> responseFuture = myClassSyncTable.insert(myClass);
当我将
DateTimeOffset
替换为
Date
时,该值被正确序列化

因此,我的问题是:

  • Azure移动应用程序是否打算让我使用DateTimeOffset?如果是,正确的使用方法是什么
  • 我可以强制Gson正确序列化DateTimeOffset吗?我查看了Gson注释,但没有任何帮助。我不确定是否应该创建用于序列化和反序列化的getter和setter

  • 如果回答不晚的话。我也有同样的问题。您可以使用
    Calendar c=Calendar.getInstance();
    SimpleDataFormat df=新的SimpleDataFormat(“yyyy-MM-dd'T'HH:MM:ss.SSS'Z'”);
    字符串formattedDate=df.format(c.getTime())
    
    解析日期。IMHO将更容易使用Gson和凌空抽射。我想你可以把它读成字符串,然后把它转换成日期。

    DateTimeOffset
    实际上是
    Date
    的一个哑包装。这里是它的全部

    /**
     * Represents a point in time, typically expressed as a date and time of day
     */
    public class DateTimeOffset extends Date {
    
        public DateTimeOffset(Date date) {
            this.setTime(date.getTime());
        }
    }
    
    我举手示意,决定改用字符串,并通过
    DateTime.parse(string)
    处理joda time的DateTime类

    然而,最好的替代方法可能是通过
    MobileServiceClient.registerSerializer(…)
    注册您自己的serialiser,但是使用它们的包装器不会得到任何有用的东西

    这是垃圾

    编辑:使用自定义(反)序列化器似乎工作得很好:

    private class DateTimeSerialiser implements JsonSerializer<DateTime>, JsonDeserializer<DateTime> {
        @Override
        public JsonElement serialize(final DateTime src, final Type typeOfSrc, final JsonSerializationContext context) {
            return new JsonPrimitive(src.toString());
        }
    
        @Override
        public DateTime deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException {
            return DateTime.parse(json.getAsString());
        }
    }
    

    这是关于DateTimeOffset Azure SDK类的吗?我的意思是在类中使用字符串,但以这种格式类型插入日期。类似这样的`公共类MyClass{public String Id;public String ClientCreatedAt;}MyClass inst=new MyClass();inst.ClientCreatedAt=df.Format(c.getTime)`
    private class DateTimeSerialiser implements JsonSerializer<DateTime>, JsonDeserializer<DateTime> {
        @Override
        public JsonElement serialize(final DateTime src, final Type typeOfSrc, final JsonSerializationContext context) {
            return new JsonPrimitive(src.toString());
        }
    
        @Override
        public DateTime deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException {
            return DateTime.parse(json.getAsString());
        }
    }
    
    private DateTime date;