I could be wrong but I don't think implementing ISimpleFacet is the way to go for your situation. If anyone knows how to do it that way, that would be a great other answer.
But to solve your issue, you could also create an extra (custom) field in the sxa index. That field could contain your logic and have a value indicating whether the event was before or after 9AM - if that are the only options a boolean would be sufficient.
I you don't know how to create such an extra field, google is your best friend. Search for ComputedIndexField
and you will find code and config examples. The code is similar across the different Sitecore versions - the configuration will differ between versions and is also dependent on the search provider (solr, azure search).
Your code will be something like:
public class MyComputedField : IComputedIndexField
{
public object ComputeFieldValue(IIndexable indexable)
{
return (.... < 9AM);
}
}
Your config could look like this (example from 9.2 and Azure):
<sitecore>
<contentSearch>
<indexConfigurations search:require="azure">
<defaultCloudIndexConfiguration>
<documentOptions>
<fields hint="raw:AddComputedIndexField">
<field fieldName="eventdatenine" returnType="bool" type="....MyComputedField, ..."/>
</fields>
</documentOptions>
</defaultCloudIndexConfiguration>
</indexConfigurations>
</contentsearch>
</sitecore>
You can use such a field in a facet (use the index field name in the facet definition). If you want to use a list facet, you'd better use a string field (and not a bool) and put the values you want to have in the facet list in the index. Those values will be used by the filter component for the display.