一、定义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对象的更多相关文章

  1. java与C#用protobuf通信--java如何转换protobuf-net中的bcl.Decimal对象

    公司内部有些C#服务使用proto-net,引入了bcl.proto中的bcl.Decimal.bcl.DateTime等.对于java的proto生成代码需要对bcl.Decimal.bcl.Dat ...

  2. java:替换List集合中的某个任意值(对象)

    定义replaceAll方法,将传入的新值替换集合中的老值(list,old,new) private static <E> void replaceAll(List<E> l ...

  3. 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 ...

  4. inner join ,left join ,right join 以及java时间转换

    1.inner join ,left join 与 right join (from 百度知道) 例表aaid adate1    a12    a23    a3表bbid  bdate1     ...

  5. RSA的密钥把JAVA格式转换成C#的格式

    RSA算法在C#与JAVA之前的交互 在JAVA生成一对RSA私钥和公钥的时候,是以下的形式给到C#去调用: string publickey = @"MIGfMA0GCSqGSIb4DQE ...

  6. eclipse下将普通的java工程转换成web工程

    开发过程中需要对普通的java工程转换成动态的web工程,网络上查询了资料很简单的几步操作就可以搞定,操作步骤如下: 编辑.project 修改以下配置 <nature>org.eclip ...

  7. Java IO 转换流 字节转字符流

    Java IO 转换流 字节转字符流 @author ixenos 字节流 输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| Fil ...

  8. Myeclipse Java项目转换成Maven项目

    1.在Eclipse中Java项目转换成Maven项目可以在项目右键-->configure-->Convert Plug-in projects..  就可以.而在myeclipse中项 ...

  9. Java数据类型在实际开发中的应用一

    在前边的博文中,我已经介绍了Java核心的容器IO等,现在我来说一下java中的数据类型.在java中,一切东西皆为对象(这句话意思是java中绝大数情况都用对象),极少数不是对象的,也存在与之对应的 ...

随机推荐

  1. Selenium1工作原理

    内容主要转自:Selenium工作原理 http://blog.csdn.net/five3/article/details/6790925 简介: Selenium 1.0中可以使用多种语言编程,当 ...

  2. 如何使用第三方webservice

    webservice地址后加wdls 生成后把文件名改为wdsl 调用方式: 1.添加webservice引用: 2.生成代理类的方法(本人比较喜欢用这种方式): 使用cmd命令行: a.通过webs ...

  3. html 数字不转行问题

    代码如下 <div style="width:20px;height:20px"> 111111111111111111111111111111111111111111 ...

  4. AngularJS创建新指令directive参数说明

    var myapp = angular.module('myapp', []); myapp.directive('worldname', function() { return { template ...

  5. Mac IDEA插件——protobuf 插件

    最近在搞PB的版本的升级,历史的PB的版本是2.4,现在是打算升级到3.2,当面PB的版本肯定有很多变化了,就不再这里多说了,这里重点说一说,采用IDEA的插件方便执行PB的文件的JAVA编译,这样的 ...

  6. C语言学习第四章

    今天学习C语言循环结构,为什么要用循环呢?因为有时候我们对一堆的数字进行重复的处理的时候要重复的编写一些相同或者差不多的代码,让程序显得很臃肿,而且写着也麻烦,如果用循环来写的话能简化很多,出错的话也 ...

  7. 关于Integer与int

    integer a=new integer(1); integer b=new integer(1); int c=1; integer d=1; a==b  false因为地址不同: a==c  t ...

  8. web.xml 中配置了error-page但不起作用问题

    问题: 在web.xml 中配置了 error-page,但是好像不起作用,就是跳转不到指定的页面. 配置信息如下: <!-- 400错误 --> <error-page> & ...

  9. Composer 常用命令总结(三)

    init(初始化) 该命令用于创建 composer.json 文件,并进行基础信息配置: $ composer init 可以配置Package name.Description.Author.Mi ...

  10. python3.x中如何实现print不换行

    大家应该知道python中print之后是默认换行的, 那如何我们不想换行,且不想讲输出内容用一个print函数输出时,就需要改变print默认换行的属性, 方法如下: print('contents ...