简体   繁体   中英

How can I set a Date in Delphi with JNI

I am creating a class in Delphi that will call methods in a Java class;

I had no problems with primitives/wrappers or String types, but I'm having problems with Date .

In java I have a setDateStart(java.util.Date dateStart) method, how can I call it in Delphi?

procedure TMyJavaObject.SetDateStart(const DateStart: TDateTime);
var
    method : JMethodID;
begin
    method := getMethod(self.clazz, 'setDateStart', '(Ljava/util/Date;)V');
    JNIEnv.CallVoidMethod(self.javaObject, method, [DateStart]);
end;

Ljava/uitl/Date is misspelled. Should be Ljava/util/Date instead.

Also, a Delphi TDateTime , which is implemented as a Double , is not compatible with a Java java.util.Date , which is an object instance. You need to create a real Date object instance and assign the TDateTime value to it as needed.

Try something more like this instead (I don't use JNI in Delphi, so this might need some tweaking, but you get the idea):

uses
    ..., DateUtils;

procedure TMyJavaObject.SetDateStart(const DateStart: TDateTime);
var
  DateValue: Int64; // a Java 'long' is a 64-bit type
  DateClass: JClass;
  DateObj: JObject;
  method : JMethodID;
begin
  // DateTimeToUnix() returns a value in seconds,
  // but the java.util.Date(long) constructor expects
  // a value in milliseconds instead...
  DateValue := DateTimeToUnix(DateStart) * 1000;

  // create a java.util.Date object instance, passing the
  // converted TDateTime value as a 'long' to its constructor...
  DateClass := JNIEnv.FindClass('java/util/Date');
  method := JNIEnv.GetMethodID(DateClass, '<init>', '(J)V');
  DateObj := JNIEnv.NewObject(DateClass, method, [DateValue]);

  // pass the java.util.Date object to the desired object method...
  method := getMethod(self.clazz, 'setDateStart', '(Ljava/util/Date;)V');
  JNIEnv.CallVoidMethod(self.javaObject, method, [DateObj]);
end;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM