Java如何转换protobuf-net中的bcl.DateTime对象
2017-05-28 19:18
531 查看
一、定义DateTime Message
参考文档:https://github.com/mgravell/protobuf-net/blob/master/src/Tools/bcl.proto
DateTime中包含两个属性:value,TimeSpanScale;
value为时间值,TimeSpanScale为时间模数:秒、微秒、毫微妙、Ticks;
Ticks是.net中的计时周期,参考:https://msdn.microsoft.com/zh-cn/library/system.datetime.ticks.aspx
1ticks=100毫微妙,10000ticks=1毫秒;
二、生成对应的Java类
protoc.exe -I=d:/tmp --java_out=d:/tmp d:/tmp/date_time.proto
三、解析C#DateTime为Java的java.util.Date
参考文档:http://www.cnblogs.com/cuyt/p/6141723.html
参考文档:https://github.com/mgravell/protobuf-net/blob/master/src/Tools/bcl.proto
message DateTime { optional sint64 value = 1; // the offset (in units of the selected scale) from 1970/01/01 optional TimeSpanScale scale = 2 [default = DAYS]; // the scale of the timespan enum TimeSpanScale { DAYS = 0; HOURS = 1; MINUTES = 2; SECONDS = 3; MILLISECONDS = 4; TICKS = 5; MINMAX = 15; // dubious } }
DateTime中包含两个属性:value,TimeSpanScale;
value为时间值,TimeSpanScale为时间模数:秒、微秒、毫微妙、Ticks;
Ticks是.net中的计时周期,参考:https://msdn.microsoft.com/zh-cn/library/system.datetime.ticks.aspx
1ticks=100毫微妙,10000ticks=1毫秒;
二、生成对应的Java类
protoc.exe -I=d:/tmp --java_out=d:/tmp d:/tmp/date_time.proto
三、解析C#DateTime为Java的java.util.Date
public class DateTimeUtil { private final static long TICKS_PER_MILLISECOND = 10000; /** * 将C#中的DateTime类型转为Java中的Date * * @param bclDateTime * @return */ public final static Date fromDateTimeToDate(DateTime dateTime) { long timeLong = dateTime.getValue(); DateTime.TimeSpanScale timeSpanScale = dateTime.getScale(); Calendar c = Calendar.getInstance(); TimeZone.setDefault(TimeZone.getTimeZone("UTC")); switch (timeSpanScale) { case DAYS: // 24 * 60 * 60 * 1000 c.setTimeInMillis(timeLong * 86400000); return c.getTime(); case HOURS: // 60 * 60 * 1000 c.setTimeInMillis(timeLong * 3600000); return c.getTime(); case MINUTES: // 60 * 1000 c.setTimeInMillis(timeLong * 60000); return c.getTime(); case SECONDS: c.setTimeInMillis(timeLong * 1000); return c.getTime(); case MILLISECONDS: c.setTimeInMillis(timeLong); return c.getTime(); case TICKS: c.setTimeInMillis(timeLong / TICKS_PER_MILLISECOND); return c.getTime(); default: c.setTimeInMillis(0L); return c.getTime(); } } }
参考文档:http://www.cnblogs.com/cuyt/p/6141723.html
相关文章推荐
- java与C#用protobuf通信--java如何转换protobuf-net中的bcl.Decimal对象
- 一种java对象转换成protobuf对象通用方法
- net.sf.json在处理json对象转换为普通java实体对象时的问题和解决方案
- Beetle使用Protobuf.net进行对象序列化传输
- 如何在DateTime对象和字符串对象之间进行转换
- java如何将Bean对象转换成Map对象?
- java的System.currentTimeMillis()如何转换成C#的DateTime.Now.Ticks?
- java fastjson如何自定义转换含枚举类型对象(编程技巧)
- Java中系统时间与C#DateTime对象之间转换方法
- 使用XStream注解实现Java对象与XML互相转换的代码示例---转自:http://www.blogjava.net/bolo
- JSON(2):如何将一个java对象转换为一个符合json语法的字符串
- 如何为asp.net core添加protobuf支持详解
- json数据与JAVA数据的转换 jsonJavaBean.netApache 自己编写了一个工具类,处理页面提交json格式数据到后台,再进行处理成JAVA对象数据 1、DTO:Data T
- json对象、json格式字符串、java对象【使用此net.sf.json.JSONObject将java对象[比如数组集合Map、Map扩展]转换成json格式字符串】
- 如何通过Java代码将JSONObject转换为对象
- 如何将ASObject转换为JAVA对象
- 如何将.proto通过命令转换成.java文件
- ASP.net:如何将对象数组转换成DataSet
- 如何将java中Date存入mysql中的datetime中,字符串怎么转换为日期类型
- Simple-Spring-Memcached使用Protobuf序列化Java对象