UserInfo.getTimeZone() can be used to get the current user time zone.
UserInfo.getTimezone().getOffset() can be used to get the offset between GMT and the local time zone.
addSeconds() can be used to add the seconds difference to find the local date time.
Sample Apex Code:
// Getting Current Running User Time Zone
TimeZone tz = UserInfo.getTimeZone();
System.debug(
tz
);
// Current Date Time in GMT
Datetime nowDT = Datetime.now();
// Finding the Offset between GMT and User Time Zone
Integer intOffset = UserInfo.getTimezone().getOffset( nowDT );
// Getting the Local Date Time by adding the seconds difference
Datetime localDT = nowDT.addSeconds( intOffset/1000 );
System.debug(
'Current Local Date Time is ' +
localDT
);