refactor: move the time formatting thing into TimeUtilities

This commit is contained in:
ChomeNS
2025-05-22 17:10:18 +07:00
parent cdaa82bdfa
commit 37e69779ae
6 changed files with 43 additions and 32 deletions

View File

@@ -1 +1 @@
3265
3266

View File

@@ -6,6 +6,7 @@ import me.chayapak1.chomens_bot.command.CommandContext;
import me.chayapak1.chomens_bot.command.CommandException;
import me.chayapak1.chomens_bot.command.TrustLevel;
import me.chayapak1.chomens_bot.util.StringUtilities;
import me.chayapak1.chomens_bot.util.TimeUtilities;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.HoverEvent;
@@ -26,10 +27,7 @@ import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
@@ -200,12 +198,13 @@ public class InfoCommand extends Command {
case "botlogintime" -> {
final long loginTime = bot.loginTime;
final Instant instant = Instant.ofEpochMilli(loginTime);
final ZoneId zoneId = ZoneId.of("UTC");
final OffsetDateTime localDateTime = OffsetDateTime.ofInstant(instant, zoneId);
final DateTimeFormatter loginTimeFormatter = DateTimeFormatter.ofPattern("MMMM d, yyyy, hh:mm:ss a Z");
final String formattedLoginTime = localDateTime.format(loginTimeFormatter);
final String formattedLoginTime = TimeUtilities.formatTime(
loginTime,
"MMMM d, yyyy, hh:mm:ss a Z",
zoneId
);
final DateFormat timeSinceFormatter = new SimpleDateFormat("HH 'hours' mm 'minutes' ss 'seconds'");
timeSinceFormatter.setTimeZone(TimeZone.getTimeZone(zoneId)); // very important

View File

@@ -10,15 +10,14 @@ import me.chayapak1.chomens_bot.data.mail.Mail;
import me.chayapak1.chomens_bot.data.player.PlayerEntry;
import me.chayapak1.chomens_bot.plugins.DatabasePlugin;
import me.chayapak1.chomens_bot.util.I18nUtilities;
import me.chayapak1.chomens_bot.util.TimeUtilities;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.JoinConfiguration;
import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@@ -129,12 +128,11 @@ public class MailCommand extends Command {
for (final Mail mail : mails) {
if (!mail.sentTo().equals(sender.profile.getName())) continue;
final Instant instant = Instant.ofEpochMilli(mail.timeSent());
final ZoneId zoneId = ZoneId.systemDefault();
final OffsetDateTime localDateTime = OffsetDateTime.ofInstant(instant, zoneId);
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy, hh:mm:ss a Z");
final String formattedTime = localDateTime.format(formatter);
final String formattedTime = TimeUtilities.formatTime(
mail.timeSent(),
"MMMM d, yyyy, hh:mm:ss a Z",
ZoneId.of("UTC")
);
mailsComponent.add(
Component.translatable(

View File

@@ -9,14 +9,12 @@ import me.chayapak1.chomens_bot.command.CommandContext;
import me.chayapak1.chomens_bot.command.CommandException;
import me.chayapak1.chomens_bot.command.TrustLevel;
import me.chayapak1.chomens_bot.plugins.DatabasePlugin;
import me.chayapak1.chomens_bot.util.TimeUtilities;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.JoinConfiguration;
import net.kyori.adventure.text.format.NamedTextColor;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
@@ -80,12 +78,11 @@ public class SeenCommand extends Command {
if (time == null || time.isNull())
throw new CommandException(Component.translatable("commands.seen.error.no_time_entry"));
final Instant instant = Instant.ofEpochMilli(time.asLong());
final ZoneId zoneId = ZoneId.of("UTC"); // should i be using this?
final OffsetDateTime localDateTime = OffsetDateTime.ofInstant(instant, zoneId);
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE, MMMM d, yyyy, hh:mm:ss a Z");
final String formattedTime = localDateTime.format(formatter);
final String formattedTime = TimeUtilities.formatTime(
time.asLong(),
"EEEE, MMMM d, yyyy, hh:mm:ss a Z",
ZoneId.of("UTC")
);
final String server = lastSeen.get("server").asText();

View File

@@ -5,13 +5,13 @@ import me.chayapak1.chomens_bot.command.Command;
import me.chayapak1.chomens_bot.command.CommandContext;
import me.chayapak1.chomens_bot.command.CommandException;
import me.chayapak1.chomens_bot.command.TrustLevel;
import me.chayapak1.chomens_bot.util.TimeUtilities;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import java.time.DateTimeException;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class TimeCommand extends Command {
public TimeCommand () {
@@ -30,11 +30,11 @@ public class TimeCommand extends Command {
final String timezone = context.getString(true, true);
final ZoneId zoneId = ZoneId.of(timezone);
final ZonedDateTime zonedDateTime = ZonedDateTime.now(zoneId);
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE, MMMM d, yyyy, hh:mm:ss a");
final String formattedTime = zonedDateTime.format(formatter);
final String formattedTime = TimeUtilities.formatTime(
Instant.now().toEpochMilli(),
"EEEE, MMMM d, yyyy, hh:mm:ss a",
ZoneId.of(timezone)
);
return Component.translatable(
"commands.time.output",

View File

@@ -0,0 +1,17 @@
package me.chayapak1.chomens_bot.util;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
public class TimeUtilities {
public static String formatTime (final long milliseconds, final String format, final ZoneId zoneId) {
final Instant instant = Instant.ofEpochMilli(milliseconds);
final OffsetDateTime localDateTime = OffsetDateTime.ofInstant(instant, zoneId);
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
return localDateTime.format(formatter);
}
}