import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;
import java.util.stream.Stream;

public class Main {
	public static void main(String[] args) {
		DateTimeFormatter dtf = new DateTimeFormatterBuilder()
        		.parseCaseInsensitive() 	//To parse in case-insensitive way e.g. AM, am
        		.appendPattern("h:m[ ]a") 	// Notice single h and m and optional space in bracket
        		.toFormatter(Locale.ENGLISH);
		
		ZoneId tz = ZoneId.of("America/Los_Angeles");
        
        //Test
        Stream.of(
        			"08:20 am",
        			"08:20 pm",
        			"08:20 AM",
        			"08:20 PM",
        			"8:20 am",
        			"08:5 pm",
        			"08:5pm",
        			"8:5am"
        ).forEach(s -> System.out.println(ZonedDateTime.of(LocalDate.now(tz), LocalTime.parse(s, dtf), tz)));
	}
}