Displaying millis() in a normal time format

Hello!
I'm working on a lap timer for slot cars, and it's going very well, however I've had a problem converting the millis() function to a more suitable time format. I've written a simple program to try and accomplish this conversion but it just doesn't work. I'm trying to convert the milliseconds into the minutes:seconds:milliseconds format. The program works fine at first (Code below), but after around 33 seconds the numbers become negative, and it starts counting up to 0 from -33. It then continues to count to 33 and start all over. Does anyone know why this is happening?

Thank you in advance for any help, it is greatly appreciated!

int millisec;
int tseconds;
int tminutes;
int seconds;
String DisplayTime;
int times;

void setup() {
  Serial.begin(9600);
  }

void loop() {
  times = millis();
  millisec  = times % 100;
  tseconds = times/1000;
  tminutes = tseconds / 60;
  seconds = tseconds % 60;
  
  DisplayTime = "Time: " + String(tminutes,DEC) + ":" + String(seconds,DEC) + ":" + String(millisec,DEC);

  Serial.println(DisplayTime);
}
int times;

millis() returns an unsigned long

try

unsigned long times;

then

String(tminutes)

You didn't read the documentation on millis(). Always read and try to understand the documentation before you use something.

An int data type can hold values from -32768 to 32767. If you write a value larger or smaller the varable “rolls over” Use the unsigned long data type for millis() values (unsigned long is the return data type for the millis() function).

Memory usage would be less if you printed the variables instead of converting them to Strings

Your version

Sketch uses 4,328 bytes (13%) of program storage space. Maximum is 32,256 bytes.
Global variables use 228 bytes (11%) of dynamic memory, leaving 1,820 bytes for local variables. Maximum is 2,048 bytes.

This version

void loop()
{
  times = millis();
  millisec  = times % 100;
  tseconds = times / 1000;
  tminutes = tseconds / 60;
  seconds = tseconds % 60;
  Serial.print("Time: ");
  Serial.print(tminutes);
  Serial.print(":");
  Serial.print(seconds);
  Serial.print(":");
  Serial.println(millisec);
}
Sketch uses 3,938 bytes (12%) of program storage space. Maximum is 32,256 bytes.
Global variables use 230 bytes (11%) of dynamic memory, leaving 1,818 bytes for local variables. Maximum is 2,048 bytes.

Thanks for your answers, i had a minor brain fart, so it works perfectly now!