Java如何转换protobuf-net中的bcl.DateTime对象
一、定义DateTime Message
参考文档:https://github.com/mgravell/protobuf-net/blob/master/src/Tools/bcl.proto
message DateTime
{
optional sint64 value = ; // the offset (in units of the selected scale) from 1970/01/01
optional TimeSpanScale scale = [default = DAYS]; // the scale of the timespan enum TimeSpanScale
{
DAYS = ;
HOURS = ;
MINUTES = ;
SECONDS = ;
MILLISECONDS = ;
TICKS = ; MINMAX = ; // 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 = ;
/**
* 将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 * );
return c.getTime();
case HOURS:
// 60 * 60 * 1000
c.setTimeInMillis(timeLong * );
return c.getTime();
case MINUTES:
// 60 * 1000
c.setTimeInMillis(timeLong * );
return c.getTime();
case SECONDS:
c.setTimeInMillis(timeLong * );
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如何转换protobuf-net中的bcl.DateTime对象的更多相关文章
- java与C#用protobuf通信--java如何转换protobuf-net中的bcl.Decimal对象
公司内部有些C#服务使用proto-net,引入了bcl.proto中的bcl.Decimal.bcl.DateTime等.对于java的proto生成代码需要对bcl.Decimal.bcl.Dat ...
- java:替换List集合中的某个任意值(对象)
定义replaceAll方法,将传入的新值替换集合中的老值(list,old,new) private static <E> void replaceAll(List<E> l ...
- Atitit.java c#.net php项目中的view复用(jsp,aspx,php的复用)
Atitit.java c#.net php项目中的view复用(jsp,aspx,php的复用) 1.1. Keyword1 1.2. 前言1 2. Java项目使用.Net的aspx页面view1 ...
- inner join ,left join ,right join 以及java时间转换
1.inner join ,left join 与 right join (from 百度知道) 例表aaid adate1 a12 a23 a3表bbid bdate1 ...
- RSA的密钥把JAVA格式转换成C#的格式
RSA算法在C#与JAVA之前的交互 在JAVA生成一对RSA私钥和公钥的时候,是以下的形式给到C#去调用: string publickey = @"MIGfMA0GCSqGSIb4DQE ...
- eclipse下将普通的java工程转换成web工程
开发过程中需要对普通的java工程转换成动态的web工程,网络上查询了资料很简单的几步操作就可以搞定,操作步骤如下: 编辑.project 修改以下配置 <nature>org.eclip ...
- Java IO 转换流 字节转字符流
Java IO 转换流 字节转字符流 @author ixenos 字节流 输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| Fil ...
- Myeclipse Java项目转换成Maven项目
1.在Eclipse中Java项目转换成Maven项目可以在项目右键-->configure-->Convert Plug-in projects.. 就可以.而在myeclipse中项 ...
- Java数据类型在实际开发中的应用一
在前边的博文中,我已经介绍了Java核心的容器IO等,现在我来说一下java中的数据类型.在java中,一切东西皆为对象(这句话意思是java中绝大数情况都用对象),极少数不是对象的,也存在与之对应的 ...
随机推荐
- 细说OC中的load和initialize方法
OC中有两个特殊的类方法,分别是load和initialize.本文总结一下这两个方法的区别于联系.使用场景和注意事项.Demo可以在我的Github上找到--load和initialize,如果觉得 ...
- 你的计算机也可以看懂世界——十分钟跑起卷积神经网络(Windows+CPU)
众所周知,如果你想研究Deep Learning,那么比较常用的配置是Linux+GPU,不过现在很多非计算机专业的同学有时也会想采用Deep Learning方法来完成一些工作,那么Linux+GP ...
- Elasticsearch搜索之best_fields分析
顾名思义,best_field就是获取最佳匹配的field,另个可以通过tie_breaker来控制其他field的得分,boost可以设置权重(默认都为1). 下面从宏观上来讲的简单公式: scor ...
- 笔记整理:计算CPU使用率 ----linux 环境编程 从应用到内核
linux 提供time命令统计进程在用户态和内核态消耗的CPU时间: [root@localhost ~]# time sleep real 0m2.001s user 0m0.001s sys 0 ...
- 为大数据软件准备JAVA、Python环境
环境:SUSE 11 64位 安装JAVA JDK 1.确定版本.一般都是安装最新的JDK(Java SE Development Kit).个别软件和系统需要特定版本的JDK,根据实际需要下载. 2 ...
- Composer 常用命令总结(三)
init(初始化) 该命令用于创建 composer.json 文件,并进行基础信息配置: $ composer init 可以配置Package name.Description.Author.Mi ...
- poj2352树状数组
Astronomers often examine star maps where stars are represented by points on a plane and each star h ...
- 解决oracle用户锁定
故障现象: SQL> connect scott/scottERROR:ORA-01017: invalid username/password; logon deniedSQL> ...
- Android ContentProvider详解
1.概述 ContentProvider以Uri的形式对外提供数据,允许其他应用程序访问或者修改数据.也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过 ...
- MySQL开发总结(有点长..耐心看)
一.理解MySQL基本概念 1.MySQL软件:MySQL实际上就是一软件,是一工具,是关系型数据库管理系统软件 2.MySQL数据库:就是按照数据结构来组织.存储和管理数据的仓库 3.MySQL数据 ...