You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:10:55