Xamarin Android中DateTime类型在WriteToParcel方法的实现问题
解决方案
在Xamarin Android中,Parcel类并没有直接提供WriteDateTime方法,你可以通过以下两种方式解决:
方法一:转换为Ticks(.NET原生时间戳)写入
- 写入Parcel时,将
DateTime转换为long类型的Ticks:// 假设你的Classdaysun实例为classDaySun dest.WriteLong(classDaySun.YourDateTimeProperty.Ticks); - 从Parcel读取时,再将Ticks转换回DateTime:
long ticks = source.ReadLong(); YourDateTimeProperty = new DateTime(ticks);
方法二:转换为Unix时间戳写入(适配Android原生习惯)
如果需要和Android原生代码交互,更推荐用Unix时间戳:
- 写入Parcel时,先将DateTime转换为UTC时区的Unix时间戳:
DateTime utcTime = classDaySun.YourDateTimeProperty.ToUniversalTime(); long unixTimestamp = (long)(utcTime - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds; dest.WriteLong(unixTimestamp); - 读取时转换回本地时区的DateTime:
long unixTimestamp = source.ReadLong(); YourDateTimeProperty = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(unixTimestamp).ToLocalTime();
注意事项
- 必须保证写入和读取的字段顺序完全一致,否则会出现解析错误。
- 处理DateTime时建议统一时区(比如全程用UTC),避免跨时区导致的时间偏移问题。
内容的提问来源于stack exchange,提问作者ShayW
相关产品推荐
相关产品推荐

