You just need to pass the date to the invocable method as a parameter since it is a primitive data type.
public class calculateStartDateTime {
@InvocableMethod(label='Calculate Date and Time' description='Converts date values to date/time values.')
public static List<Datetime> getStartDates(List<Date> startDates)
{
Timezone tz = Timezone.getTimeZone('Australia/Sydney');
List<Datetime> dateTimes = new List<Datetime>();
for (Date startDate : startDates)
{
Integer offset = tz.getOffset(startDate);
Time t = Time.newInstance(9, 30, 0, 0);
Datetime dt = Datetime.newInstanceGmt(startDate, t).addSeconds(-offset/1000);
dateTimes.add(dt);
}
Return dateTimes;
}
}
Important notes about invocable methods
Inputs and Outputs
There can be at most one input parameter and its data type must be one of the following:
A list of a primitive data type or a list of lists of a primitive data type – the generic Object type is not supported.
A list of an sObject type or a list of lists of an sObject type – the generic sObject type is not supported.
A list of a user-defined type, containing variables of the supported types and with the InvocableVariable annotation. Create a custom global or public Apex class to implement your data type, and make sure your class contains at least one member variable with the invocable variable annotation.
If the return type is not Null, the data type returned by the method must be one of the following:
A list of a primitive data type or a list of lists of a primitive data type – the generic Object type is not supported.
A list of an sObject type or a list of lists of an sObject type – the generic sObject type is not supported.
A list of a user-defined type, containing variables of the supported types and with the InvocableVariable annotation. Create a custom global or public Apex class to implement your data type, and make sure your class contains at least one member variable with the invocable variable annotation.
Sources: Invocable Methods Salesforce Help