JNI中的日期问题
Trouble with Date in JNI
我需要将Java Date参数传递给使用JNI的c++项目中的Java方法。
jclass date = env->FindClass("java/util/Date");
if (env->ExceptionCheck()){
cout << "Fail:";
}
jmethodID dateTypeConstructor= env->GetMethodID(date, "<init>", "()V");
if(dateTypeConstructor == nullptr){
cout << "Fail:";
}
jobject dateObjectStart = env->NewObject(date, dateTypeConstructor);
if(dateObjectStart == nullptr){
cout << "Fail:";
}
long a = env->CallLongMethod(dateObjectStart,gettIME);
通过调试,我取a
的值,即582106004
。该值是自1970年1月1日以来通过的msec。同样的代码,实例化一个Date对象并获得时间,在Java中给我的值1400741921774
是正确的。
为什么会发生这种情况?我怀疑JDK有问题,因为在我的c++/JNI项目中,我使用JDK 1.8,而Java/util/Date有点过时。
以下代码的输出:
jclass date = env->FindClass("java/util/Date");
if (env->ExceptionCheck()){
std::cout << "Fail:";
}
jmethodID dateTypeConstructor= env->GetMethodID(date, "<init>", "()V");
if(dateTypeConstructor == nullptr){
std::cout << "Fail:";
}
jobject dateObjectStart = env->NewObject(date, dateTypeConstructor);
if(dateObjectStart == nullptr){
std::cout << "Fail:";
}
jmethodID getTime = env->GetMethodID(date, "getTime", "()J");
if(getTime == nullptr){
std::cout << "Fail:";
}
jlong a = env->CallLongMethod(dateObjectStart, getTime);
std::cout << a << std::endl;
在我的机器上(JNI, 1.6 JDK):
1400754723399
这对我来说似乎是正确的-还要确保使用jlong
(总是64位)-而不仅仅是long
(可能是32位-取决于你的体系结构)-这些实际上可以在那里有所不同。如果打开编译器警告,
long a = env->CallLongMethod(dateObjectStart, getTime);
应该会引发编译器警告。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- 查询SQLite数据库中的日期
- Project Euler问题4的错误解决方案
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- JNI 日期值转换问题,在C++中获取不同的长整型值
- 在 MacOS 上C++:显示日期和时间问题
- 开发简单的时钟和日期类时遇到问题
- 扩展中的日期时间对象方法C++问题
- 计算当前日期和用户输入日期问题之间的天数
- 通过 ODBC C++将带有日期时间的记录插入 SQL Server 2014 的问题
- DTN_DATETIMECHANGE断点和日期时间选取器控件是否存在问题
- 夏令时和其他时区相关的问题与boost日期时间库
- JNI中的日期问题
- 日期类的Xcode问题