And is there a difference if I just used (time somecommand) &> file.txt ?
The difference is command(s) in ( ... )
run in a subshell;it's a different process. Whereas, commands under {...}
runs in the same shell. From bash manual:
(list) list is executed in a subshell environment (see COMMAND
EXECUTION ENVIRONMENT below). Variable assignments and
builtin commands that affect the shell's environment do not
remain in effect after the command completes. The return
status is the exit status of list.
As for the spaces in compound commands, it's required by the bash grammar:
{ list; }
list is simply executed in the current shell environment.
list must be terminated with a newline or semicolon. This is
known as a group command. The return status is the exit
status of list. Note that unlike the metacharacters ( and ),
{ and } are reserved words and must occur where a reserved
word is permitted to be recognized. Since they do not cause a
word break, they must be separated from list by whitespace or
another shell metacharacter.