diff --git a/code/__DEFINES/time.dm b/code/__DEFINES/time.dm
index 5edba8746f8..ad87ba9229c 100644
--- a/code/__DEFINES/time.dm
+++ b/code/__DEFINES/time.dm
@@ -2,7 +2,7 @@
#define MIDNIGHT_ROLLOVER 864000
///displays the current time into the round, with a lot of extra code just there for ensuring it looks okay after an entire day passes
-#define ROUND_TIME(...) ( "[world.time - SSticker.round_start_time > MIDNIGHT_ROLLOVER ? "[round((world.time - SSticker.round_start_time)/MIDNIGHT_ROLLOVER)]:[worldtime2text()]" : worldtime2text()]" )
+#define ROUND_TIME(...) ( "[world.time - SSticker.round_start_time > MIDNIGHT_ROLLOVER ? "[round((world.time - SSticker.round_start_time)/MIDNIGHT_ROLLOVER)]:[gameTimestamp()]" : gameTimestamp()]" )
///Returns the time that has passed since the game started
#define STATION_TIME_PASSED(...) (world.time - SSticker.round_start_time)
@@ -174,3 +174,6 @@ When using time2text(), please use "DDD" to find the weekday. Refrain from using
/// Anywhere on Earth
#define TIMEZONE_ANYWHERE_ON_EARTH -12
+
+/// in the grim darkness of the thirteenth space station there is no timezones, since they break IC game times. Use this for all IC/round time values
+#define NO_TIMEZONE 0
diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm
index 5d39ff47177..49de184a915 100644
--- a/code/__HELPERS/time.dm
+++ b/code/__HELPERS/time.dm
@@ -1,19 +1,19 @@
-//Returns the world time in english
-/proc/worldtime2text()
- return gameTimestamp("hh:mm:ss", world.time)
-
+/// Returns UTC timestamp with the specifified format and optionally deciseconds
/proc/time_stamp(format = "hh:mm:ss", show_ds)
- var/time_string = time2text(world.timeofday, format)
+ var/time_string = time2text(world.timeofday, format, TIMEZONE_UTC)
return show_ds ? "[time_string]:[world.timeofday % 10]" : time_string
+/// Returns timestamp since the server started, for use with world.time
/proc/gameTimestamp(format = "hh:mm:ss", wtime=world.time)
- return time2text(wtime, format)
+ return time2text(wtime, format, NO_TIMEZONE)
+///returns the current IC station time in a world.time format
/proc/station_time(display_only = FALSE, wtime=world.time)
return ((((wtime - SSticker.round_start_time) * SSticker.station_time_rate_multiplier) + SSticker.gametime_offset) % 864000) - (display_only? GLOB.timezoneOffset : 0)
+///returns the current IC station time in a human readable format
/proc/station_time_timestamp(format = "hh:mm:ss", wtime)
- return time2text(station_time(TRUE, wtime), format)
+ return time2text(station_time(TRUE, wtime), format, NO_TIMEZONE)
/proc/station_time_debug(force_set)
if(isnum(force_set))
@@ -25,9 +25,9 @@
else
SSticker.gametime_offset = CEILING(SSticker.gametime_offset, 3600)
-//returns timestamp in a sql and a not-quite-compliant ISO 8601 friendly format
+///returns timestamp in a sql and a not-quite-compliant ISO 8601 friendly format. Do not use for SQL, use NOW() instead
/proc/ISOtime(timevar)
- return time2text(timevar || world.timeofday, "YYYY-MM-DD hh:mm:ss")
+ return time2text(timevar || world.timeofday, "YYYY-MM-DD hh:mm:ss", world.timezone)
GLOBAL_VAR_INIT(midnight_rollovers, 0)
diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index aae96c38601..c7b7cdd4bc1 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -4,7 +4,6 @@
* file2list
* angle2dir
* angle2text
- * worldtime2text
* text2dir_extended & dir2text_short
*/
diff --git a/code/_globalvars/time_vars.dm b/code/_globalvars/time_vars.dm
index cc830721145..29526f845b2 100644
--- a/code/_globalvars/time_vars.dm
+++ b/code/_globalvars/time_vars.dm
@@ -2,5 +2,5 @@
/// The difference betwen midnight (of the host computer) and 0 world.ticks.
GLOBAL_VAR_INIT(timezoneOffset, 0)
-GLOBAL_VAR_INIT(year, time2text(world.realtime,"YYYY"))
+GLOBAL_VAR_INIT(year, time2text(world.realtime, "YYYY", NO_TIMEZONE))
GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013???
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index 92ca73f4268..d48cd14f311 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -268,7 +268,7 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie
/datum/controller/master/Recover()
- var/msg = "## DEBUG: [time2text(world.timeofday)] MC restarted. Reports:\n"
+ var/msg = "## DEBUG: [time2text(world.timeofday, "DDD MMM DD hh:mm:ss YYYY", TIMEZONE_UTC)] MC restarted. Reports:\n"
var/list/master_attributes = Master.vars
var/list/filtered_variables = list(
NAMEOF(src, name),
diff --git a/code/controllers/subsystem/dynamic/dynamic.dm b/code/controllers/subsystem/dynamic/dynamic.dm
index d6d99e318d1..65ffc205b56 100644
--- a/code/controllers/subsystem/dynamic/dynamic.dm
+++ b/code/controllers/subsystem/dynamic/dynamic.dm
@@ -247,9 +247,9 @@ SUBSYSTEM_DEF(dynamic)
if(!threatadd)
return
if(threatadd > 0)
- create_threat(threatadd, threat_log, "[worldtime2text()]: increased by [key_name(usr)]")
+ create_threat(threatadd, threat_log, "[gameTimestamp()]: increased by [key_name(usr)]")
else
- spend_midround_budget(-threatadd, threat_log, "[worldtime2text()]: decreased by [key_name(usr)]")
+ spend_midround_budget(-threatadd, threat_log, "[gameTimestamp()]: decreased by [key_name(usr)]")
else if (href_list["injectlate"])
latejoin_injection_cooldown = 0
late_forced_injection = TRUE
@@ -317,7 +317,7 @@ SUBSYSTEM_DEF(dynamic)
addtimer(CALLBACK(src, PROC_REF(send_intercept)), 10 SECONDS)
return
- . = "Nanotrasen Department of Intelligence Threat Advisory, Spinward Sector, TCD [time2text(world.realtime, "DDD, MMM DD")], [CURRENT_STATION_YEAR]:
"
+ . = "Nanotrasen Department of Intelligence Threat Advisory, Spinward Sector, TCD [time2text(world.realtime, "DDD, MMM DD", NO_TIMEZONE)], [CURRENT_STATION_YEAR]:
"
. += generate_advisory_level()
var/min_threat = 100
@@ -512,7 +512,7 @@ SUBSYSTEM_DEF(dynamic)
roundstart(roundstart_rules)
log_dynamic("[round_start_budget] round start budget was left, donating it to midrounds.")
- threat_log += "[worldtime2text()]: [round_start_budget] round start budget was left, donating it to midrounds."
+ threat_log += "[gameTimestamp()]: [round_start_budget] round start budget was left, donating it to midrounds."
mid_round_budget += round_start_budget
var/starting_rulesets = ""
@@ -719,7 +719,7 @@ SUBSYSTEM_DEF(dynamic)
var/added_threat = ruleset.scale_up(roundstart_pop_ready, scaled_times)
if(ruleset.pre_execute(roundstart_pop_ready))
- threat_log += "[worldtime2text()]: Roundstart [ruleset.name] spent [ruleset.cost + added_threat]. [ruleset.scaling_cost ? "Scaled up [ruleset.scaled_times]/[scaled_times] times." : ""]"
+ threat_log += "[gameTimestamp()]: Roundstart [ruleset.name] spent [ruleset.cost + added_threat]. [ruleset.scaling_cost ? "Scaled up [ruleset.scaled_times]/[scaled_times] times." : ""]"
if(ruleset.flags & ONLY_RULESET)
only_ruleset_executed = TRUE
if(ruleset.flags & HIGH_IMPACT_RULESET)
@@ -777,7 +777,7 @@ SUBSYSTEM_DEF(dynamic)
new_rule.load_templates()
if (new_rule.ready(forced))
if (!ignore_cost)
- spend_midround_budget(new_rule.cost, threat_log, "[worldtime2text()]: Forced rule [new_rule.name]")
+ spend_midround_budget(new_rule.cost, threat_log, "[gameTimestamp()]: Forced rule [new_rule.name]")
new_rule.pre_execute(population)
if (new_rule.execute()) // This should never fail since ready() returned 1
if(new_rule.flags & HIGH_IMPACT_RULESET)
diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets.dm
index 17939cf426a..1eca2aeaff3 100644
--- a/code/controllers/subsystem/dynamic/dynamic_rulesets.dm
+++ b/code/controllers/subsystem/dynamic/dynamic_rulesets.dm
@@ -218,7 +218,7 @@
/// This one only handles refunding the threat, override in ruleset to clean up the rest.
/datum/dynamic_ruleset/proc/clean_up()
SSdynamic.refund_threat(cost + (scaled_times * scaling_cost))
- SSdynamic.threat_log += "[worldtime2text()]: [ruletype] [name] refunded [cost + (scaled_times * scaling_cost)]. Failed to execute."
+ SSdynamic.threat_log += "[gameTimestamp()]: [ruletype] [name] refunded [cost + (scaled_times * scaling_cost)]. Failed to execute."
/// Gets weight of the ruleset
/// Note that this decreases weight if repeatable is TRUE and repeatable_weight_decrease is higher than 0
diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm
index 324ae14f3a1..b0a56cccad0 100644
--- a/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm
+++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm
@@ -607,7 +607,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE)
log_game("Starting a round of extended.")
SSdynamic.spend_roundstart_budget(SSdynamic.round_start_budget)
SSdynamic.spend_midround_budget(SSdynamic.mid_round_budget)
- SSdynamic.threat_log += "[worldtime2text()]: Extended ruleset set threat to 0."
+ SSdynamic.threat_log += "[gameTimestamp()]: Extended ruleset set threat to 0."
return TRUE
//////////////////////////////////////////////
diff --git a/code/controllers/subsystem/dynamic/ruleset_picking.dm b/code/controllers/subsystem/dynamic/ruleset_picking.dm
index f01250069e4..baeceada57c 100644
--- a/code/controllers/subsystem/dynamic/ruleset_picking.dm
+++ b/code/controllers/subsystem/dynamic/ruleset_picking.dm
@@ -105,7 +105,7 @@
/// Mainly here to facilitate delayed rulesets. All midround/latejoin rulesets are executed with a timered callback to this proc.
/datum/controller/subsystem/dynamic/proc/execute_midround_latejoin_rule(sent_rule)
var/datum/dynamic_ruleset/rule = sent_rule
- spend_midround_budget(rule.cost, threat_log, "[worldtime2text()]: [rule.ruletype] [rule.name]")
+ spend_midround_budget(rule.cost, threat_log, "[gameTimestamp()]: [rule.ruletype] [rule.name]")
rule.pre_execute(GLOB.alive_player_list.len)
if (rule.execute())
log_dynamic("Injected a [rule.ruletype] ruleset [rule.name].")
diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm
index f4b8c8138b8..ff6b23da6ef 100644
--- a/code/controllers/subsystem/events.dm
+++ b/code/controllers/subsystem/events.dm
@@ -165,10 +165,10 @@ GLOBAL_LIST(holidays)
for(var/timezone in holiday.timezones)
var/time_in_timezone = world.realtime + timezone HOURS
- var/YYYY = text2num(time2text(time_in_timezone, "YYYY")) // get the current year
- var/MM = text2num(time2text(time_in_timezone, "MM")) // get the current month
- var/DD = text2num(time2text(time_in_timezone, "DD")) // get the current day
- var/DDD = time2text(time_in_timezone, "DDD") // get the current weekday
+ var/YYYY = text2num(time2text(time_in_timezone, "YYYY", world.timezone)) // get the current year
+ var/MM = text2num(time2text(time_in_timezone, "MM", world.timezone)) // get the current month
+ var/DD = text2num(time2text(time_in_timezone, "DD", world.timezone)) // get the current day
+ var/DDD = time2text(time_in_timezone, "DDD", world.timezone) // get the current weekday
if(holiday.shouldCelebrate(DD, MM, YYYY, DDD))
holiday.celebrate()
diff --git a/code/controllers/subsystem/persistent_paintings.dm b/code/controllers/subsystem/persistent_paintings.dm
index 7da30fd4772..b2f0921df6d 100644
--- a/code/controllers/subsystem/persistent_paintings.dm
+++ b/code/controllers/subsystem/persistent_paintings.dm
@@ -245,7 +245,7 @@ SUBSYSTEM_DEF(persistent_paintings)
new_data["title"] = old_data["title"] || "Untitled Artwork"
new_data["creator_ckey"] = old_data["ckey"] || ""
new_data["creator_name"] = "Anonymous"
- new_data["creation_date"] = time2text(world.realtime) // Could use creation/modified file helpers in rustg
+ new_data["creation_date"] = time2text(world.realtime, "DDD MMM DD hh:mm:ss YYYY", TIMEZONE_UTC) // Could use creation/modified file helpers in rustg
new_data["creation_round_id"] = GLOB.round_id
new_data["tags"] = list(category,"Migrated from version 0")
new_data["patron_ckey"] = ""
diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm
index a9736751c47..9f0f2077a2f 100644
--- a/code/controllers/subsystem/statpanel.dm
+++ b/code/controllers/subsystem/statpanel.dm
@@ -28,7 +28,7 @@ SUBSYSTEM_DEF(statpanels)
"Map: [SSmapping.current_map?.map_name || "Loading..."]",
cached ? "Next Map: [cached.map_name]" : null,
"Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]",
- "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]",
+ "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss", world.timezone)]",
"Round Time: [ROUND_TIME()]",
"Station Time: [station_time_timestamp()]",
"Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)"
diff --git a/code/datums/json_savefile.dm b/code/datums/json_savefile.dm
index dd2a6af0b98..f68efd432d1 100644
--- a/code/datums/json_savefile.dm
+++ b/code/datums/json_savefile.dm
@@ -95,7 +95,7 @@ GENERAL_PROTECT_DATUM(/datum/json_savefile)
return
COOLDOWN_START(src, download_cooldown, (CONFIG_GET(number/seconds_cooldown_for_preferences_export) * (1 SECONDS)))
- var/file_name = "[account_name ? "[account_name]_" : ""]preferences_[time2text(world.timeofday, "MMM_DD_YYYY_hh-mm-ss")].json"
+ var/file_name = "[account_name ? "[account_name]_" : ""]preferences_[time2text(world.timeofday, "MMM_DD_YYYY_hh-mm-ss", TIMEZONE_UTC)].json"
var/temporary_file_storage = "data/preferences_export_working_directory/[file_name]"
if(!text2file(json_encode(tree, JSON_PRETTY_PRINT), temporary_file_storage))
diff --git a/code/datums/memory/_memory.dm b/code/datums/memory/_memory.dm
index 08a694616a3..fe5546ea330 100644
--- a/code/datums/memory/_memory.dm
+++ b/code/datums/memory/_memory.dm
@@ -358,9 +358,9 @@
//after replacement section for performance
if(story_flags & STORY_FLAG_DATED)
if(memory_flags & MEMORY_FLAG_NOSTATIONNAME)
- parsed_story += "This took place in [time2text(world.realtime, "Month")] of [CURRENT_STATION_YEAR]."
+ parsed_story += "This took place in [time2text(world.realtime, "Month", NO_TIMEZONE)] of [CURRENT_STATION_YEAR]."
else
- parsed_story += "This took place in [time2text(world.realtime, "Month")] of [CURRENT_STATION_YEAR] on [station_name()]."
+ parsed_story += "This took place in [time2text(world.realtime, "Month", NO_TIMEZONE)] of [CURRENT_STATION_YEAR] on [station_name()]."
parsed_story = trim_right(parsed_story)
diff --git a/code/game/machinery/civilian_bounties.dm b/code/game/machinery/civilian_bounties.dm
index 5024a588e23..839151e7025 100644
--- a/code/game/machinery/civilian_bounties.dm
+++ b/code/game/machinery/civilian_bounties.dm
@@ -317,7 +317,7 @@
/obj/item/bounty_cube/examine()
. = ..()
if(speed_bonus)
- . += span_notice("[time2text(next_nag_time - world.time,"mm:ss")] remains until [bounty_value * speed_bonus] credit speedy delivery bonus lost.")
+ . += span_notice("[time2text(next_nag_time - world.time,"mm:ss", NO_TIMEZONE)] remains until [bounty_value * speed_bonus] credit speedy delivery bonus lost.")
if(handler_tip && !bounty_handler_account)
. += span_notice("Scan this in the cargo shuttle with an export scanner to register your bank account for the [bounty_value * handler_tip] credit handling tip.")
@@ -363,7 +363,7 @@
"LOCATION" = get_area_name(src),
"PERSON" = bounty_holder,
"RANK" = bounty_holder_job,
- "BONUSTIME" = time2text(next_nag_time - world.time,"mm:ss"),
+ "BONUSTIME" = time2text(next_nag_time - world.time,"mm:ss", NO_TIMEZONE),
"COST" = bounty_value
), src, list(RADIO_CHANNEL_SUPPLY))
diff --git a/code/game/objects/items/AI_modules/_AI_modules.dm b/code/game/objects/items/AI_modules/_AI_modules.dm
index cf689584805..be1d5a311cf 100644
--- a/code/game/objects/items/AI_modules/_AI_modules.dm
+++ b/code/game/objects/items/AI_modules/_AI_modules.dm
@@ -89,7 +89,7 @@
else
to_chat(user, span_notice("Upload complete."))
- var/time = time2text(world.realtime,"hh:mm:ss")
+ var/time = time2text(world.realtime,"hh:mm:ss", TIMEZONE_UTC)
var/ainame = law_datum.owner ? law_datum.owner.name : "empty AI core"
var/aikey = law_datum.owner ? law_datum.owner.ckey : "null"
diff --git a/code/game/objects/items/devices/table_clock.dm b/code/game/objects/items/devices/table_clock.dm
index 8f35a60b0e4..329b38bcc92 100644
--- a/code/game/objects/items/devices/table_clock.dm
+++ b/code/game/objects/items/devices/table_clock.dm
@@ -31,7 +31,7 @@
. += span_info("It appears to be currently broken. You can use it in-hand to repair it.")
else
. += span_info("The current CST (local) time is: [station_time_timestamp()].")
- . += span_info("The current TCT (galactic) time is: [time2text(world.realtime, "hh:mm:ss")].")
+ . += span_info("The current TCT (galactic) time is: [time2text(world.realtime, "hh:mm:ss", NO_TIMEZONE)].")
/obj/item/table_clock/attackby(obj/item/attacking_item, mob/user, params)
. = ..()
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index d624288703e..79748bec7f2 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -159,7 +159,7 @@
return
mytape.timestamp += mytape.used_capacity
- mytape.storedinfo += "\[[time2text(mytape.used_capacity,"mm:ss")]\] [speaker.GetVoice()]: [raw_message]"
+ mytape.storedinfo += "\[[time2text(mytape.used_capacity,"mm:ss", NO_TIMEZONE)]\] [speaker.GetVoice()]: [raw_message]"
/obj/item/taperecorder/verb/record()
diff --git a/code/game/objects/structures/signs/signs_interactive.dm b/code/game/objects/structures/signs/signs_interactive.dm
index 1e407034f4a..5ef9031fef9 100644
--- a/code/game/objects/structures/signs/signs_interactive.dm
+++ b/code/game/objects/structures/signs/signs_interactive.dm
@@ -8,7 +8,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/clock, 32)
/obj/structure/sign/clock/examine(mob/user)
. = ..()
. += span_info("The current CST (local) time is: [station_time_timestamp()].")
- . += span_info("The current TCT (galactic) time is: [time2text(world.realtime, "hh:mm:ss")].")
+ . += span_info("The current TCT (galactic) time is: [time2text(world.realtime, "hh:mm:ss", 0)].")
/obj/structure/sign/calendar
name = "wall calendar"
@@ -19,7 +19,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/calendar, 32)
/obj/structure/sign/calendar/examine(mob/user)
. = ..()
- . += span_info("The current date is: [time2text(world.realtime, "DDD, MMM DD")], [CURRENT_STATION_YEAR].")
+ . += span_info("The current date is: [time2text(world.realtime, "DDD, MMM DD", world.timezone)], [CURRENT_STATION_YEAR].")
if(length(GLOB.holidays))
. += span_info("Events:")
for(var/holidayname in GLOB.holidays)
diff --git a/code/game/world.dm b/code/game/world.dm
index 2485481fd79..b3b1e90a827 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -223,10 +223,10 @@ GLOBAL_PROTECT(tracy_init_reason)
var/override_dir = params[OVERRIDE_LOG_DIRECTORY_PARAMETER]
if(!override_dir)
var/realtime = world.realtime
- var/texttime = time2text(realtime, "YYYY/MM/DD")
+ var/texttime = time2text(realtime, "YYYY/MM/DD", TIMEZONE_UTC)
GLOB.log_directory = "data/logs/[texttime]/round-"
GLOB.public_log_directory = "data/public/logs/[texttime]/round-" // BUBBER EDIT ADDITION
- GLOB.picture_logging_prefix = "L_[time2text(realtime, "YYYYMMDD")]_"
+ GLOB.picture_logging_prefix = "L_[time2text(realtime, "YYYYMMDD", TIMEZONE_UTC)]_"
GLOB.picture_log_directory = "data/picture_logs/[texttime]/round-"
if(GLOB.round_id)
GLOB.log_directory += "[GLOB.round_id]"
@@ -252,8 +252,7 @@ GLOBAL_PROTECT(tracy_init_reason)
if(!fexists(GLOB.master_public_log_file)) // BUBBER EDIT ADDITION
rustg_file_write("Starting up round ID [GLOB.round_id].\n --------------------------\n", GLOB.master_public_log_file) // BUBBER EDIT ADDITION
-
- var/latest_changelog = file("[global.config.directory]/../html/changelogs/archive/" + time2text(world.timeofday, "YYYY-MM") + ".yml")
+ var/latest_changelog = file("[global.config.directory]/../html/changelogs/archive/" + time2text(world.timeofday, "YYYY-MM", TIMEZONE_UTC) + ".yml")
GLOB.changelog_hash = fexists(latest_changelog) ? md5(latest_changelog) : 0 //for telling if the changelog has changed recently
if(GLOB.round_id)
@@ -427,7 +426,7 @@ GLOBAL_PROTECT(tracy_init_reason)
else if(SSticker.current_state == GAME_STATE_SETTING_UP)
new_status += "
Starting: Now"
else if(SSticker.IsRoundInProgress())
- new_status += "
Time: [time2text(STATION_TIME_PASSED(), "hh:mm", 0)]"
+ new_status += "
Time: [time2text(STATION_TIME_PASSED(), "hh:mm", NO_TIMEZONE)]"
if(SSshuttle?.emergency && SSshuttle?.emergency?.mode != (SHUTTLE_IDLE || SHUTTLE_ENDGAME))
new_status += " | Shuttle: [SSshuttle.emergency.getModeStr()] [SSshuttle.emergency.getTimerStr()]"
else if(SSticker.current_state == GAME_STATE_FINISHED)
diff --git a/code/modules/admin/verbs/map_export.dm b/code/modules/admin/verbs/map_export.dm
index 056a2ea1f8a..057a8476892 100644
--- a/code/modules/admin/verbs/map_export.dm
+++ b/code/modules/admin/verbs/map_export.dm
@@ -7,7 +7,7 @@ ADMIN_VERB(map_export, R_DEBUG, "Map Export", "Select a part of the map by coord
var/start_y = tgui_input_number(user, "Start Y?", "Map Exporter", user_y || 1, world.maxy, 1)
var/end_x = tgui_input_number(user, "End X?", "Map Exporter", user_x || 1, world.maxx, 1)
var/end_y = tgui_input_number(user, "End Y?", "Map Exporter", user_y || 1, world.maxy, 1)
- var/date = time2text(world.timeofday, "YYYY-MM-DD_hh-mm-ss")
+ var/date = time2text(world.timeofday, "YYYY-MM-DD_hh-mm-ss", TIMEZONE_UTC)
var/file_name = sanitize_filename(tgui_input_text(user, "Filename?", "Map Exporter", "exported_map_[date]"))
var/confirm = tgui_alert(user, "Are you sure you want to do this? This will cause extreme lag!", "Map Exporter", list("Yes", "No"))
diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm
index 30d12425e11..16b1ac1f95e 100644
--- a/code/modules/antagonists/heretic/heretic_knowledge.dm
+++ b/code/modules/antagonists/heretic/heretic_knowledge.dm
@@ -529,7 +529,7 @@
to_chat(user, span_boldnotice("[name] completed!"))
to_chat(user, span_hypnophrase(span_big("[pick_list(HERETIC_INFLUENCE_FILE, "drain_message")]")))
desc += " (Completed!)"
- log_heretic_knowledge("[key_name(user)] completed a [name] at [worldtime2text()].")
+ log_heretic_knowledge("[key_name(user)] completed a [name] at [gameTimestamp()].")
user.add_mob_memory(/datum/memory/heretic_knowledge_ritual)
return TRUE
@@ -558,7 +558,7 @@
for(var/datum/heretic_knowledge/knowledge as anything in flatten_list(our_heretic.researched_knowledge))
total_points += knowledge.cost
- log_heretic_knowledge("[key_name(user)] gained knowledge of their final ritual at [worldtime2text()]. \
+ log_heretic_knowledge("[key_name(user)] gained knowledge of their final ritual at [gameTimestamp()]. \
They have [length(our_heretic.researched_knowledge)] knowledge nodes researched, totalling [total_points] points \
and have sacrificed [our_heretic.total_sacrifices] people ([our_heretic.high_value_sacrifices] of which were high value)")
@@ -605,7 +605,7 @@
human_user.physiology.burn_mod *= 0.5
SSblackbox.record_feedback("tally", "heretic_ascended", 1, GLOB.heretic_research_tree[type][HKT_ROUTE])
- log_heretic_knowledge("[key_name(user)] completed their final ritual at [worldtime2text()].")
+ log_heretic_knowledge("[key_name(user)] completed their final ritual at [gameTimestamp()].")
notify_ghosts(
"[user] has completed an ascension ritual!",
source = user,
diff --git a/code/modules/art/paintings.dm b/code/modules/art/paintings.dm
index b3bcc4c8829..d92ac0582f8 100644
--- a/code/modules/art/paintings.dm
+++ b/code/modules/art/paintings.dm
@@ -248,7 +248,7 @@
painting_metadata.creator_ckey = user.ckey
painting_metadata.creator_name = user.real_name
- painting_metadata.creation_date = time2text(world.realtime)
+ painting_metadata.creation_date = time2text(world.realtime, "DDD MMM DD hh:mm:ss YYYY", TIMEZONE_UTC)
painting_metadata.creation_round_id = GLOB.round_id
generate_proper_overlay()
finalized = TRUE
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index b5346386d7d..31219791e2f 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -146,7 +146,7 @@
if(!radio_connection)
return
- var/time = time2text(world.realtime,"hh:mm:ss")
+ var/time = time2text(world.realtime, "hh:mm:ss", TIMEZONE_UTC)
var/turf/T = get_turf(src)
var/logging_data = "[time] : [key_name(usr)] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]"
diff --git a/code/modules/buildmode/submodes/map_export.dm b/code/modules/buildmode/submodes/map_export.dm
index 9d59263aa47..0276fd199f2 100644
--- a/code/modules/buildmode/submodes/map_export.dm
+++ b/code/modules/buildmode/submodes/map_export.dm
@@ -84,7 +84,7 @@ GLOBAL_VAR_INIT(map_writing_running, FALSE)
var/dat = write_map(minx, miny, minz, maxx, maxy, maxz, save_flag, shuttle_flag)
//Step 2: Write the data to a file and give map to client
- var/date = time2text(world.timeofday, "YYYY-MM-DD_hh-mm-ss")
+ var/date = time2text(world.timeofday, "YYYY-MM-DD_hh-mm-ss", TIMEZONE_UTC)
var/file_name = sanitize_filename(tgui_input_text(usr, "Filename?", "Map Exporter", "exported_map_[date]"))
send_exported_map(usr, file_name, dat)
to_chat(usr, span_green("The map was successfully saved!"))
diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm
index aedec750914..57bd2735707 100644
--- a/code/modules/detectivework/scanner.dm
+++ b/code/modules/detectivework/scanner.dm
@@ -205,9 +205,6 @@
log_data += list(log_entry_data)
return TRUE
-/proc/get_timestamp()
- return time2text(world.time + 432000, ":ss")
-
/obj/item/detective_scanner/click_alt(mob/living/user)
return clear_logs()
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index 94dae2c571f..6da47fd5a33 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -168,7 +168,7 @@ Runs the event
if(announce_chance_override != null)
round_event.announce_chance = announce_chance_override
- testing("[time2text(world.time, "hh:mm:ss")] [round_event.type]")
+ testing("[time2text(world.time, "hh:mm:ss", 0)] [round_event.type]")
triggering = TRUE
if(!triggering)
diff --git a/code/modules/fishing/fish_mount.dm b/code/modules/fishing/fish_mount.dm
index 37eeb0049f2..903a08801f4 100644
--- a/code/modules/fishing/fish_mount.dm
+++ b/code/modules/fishing/fish_mount.dm
@@ -124,7 +124,7 @@
if(!fish.catcher_name)
fish.catcher_name = catcher
if(!fish.catch_date)
- fish.catch_date = "[time2text(world.realtime, "Day, Month DD")], [CURRENT_STATION_YEAR]"
+ fish.catch_date = "[time2text(world.realtime, "Day, Month DD", NO_TIMEZONE)], [CURRENT_STATION_YEAR]"
AddElement(/datum/element/beauty, get_fish_beauty())
RegisterSignals(fish, list(COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACK_PAW), PROC_REF(on_fish_attack_hand))
diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm
index 68ce6651450..df760526a8f 100644
--- a/code/modules/holiday/holidays.dm
+++ b/code/modules/holiday/holidays.dm
@@ -147,7 +147,7 @@
return pick("Aotearoa","Kiwi","Fish 'n' Chips","Kākāpō","Southern Cross")
/datum/holiday/nz/greet()
- var/nz_age = text2num(time2text(world.timeofday, "YYYY")) - 1840
+ var/nz_age = text2num(time2text(world.timeofday, "YYYY", TIMEZONE_NZST)) - 1840
return "On this day [nz_age] years ago, New Zealand's Treaty of Waitangi, the founding document of the nation, was signed!"
/datum/holiday/valentines
@@ -172,7 +172,7 @@
poster_icon = "holiday_cake" // is a lie
/datum/holiday/birthday/greet()
- var/game_age = text2num(time2text(world.timeofday, "YYYY")) - 2003
+ var/game_age = text2num(time2text(world.timeofday, "YYYY", world.timezone)) - 2003
var/Fact
switch(game_age)
if(16)
@@ -870,7 +870,7 @@
/datum/holiday/easter/shouldCelebrate(dd, mm, yyyy, ddd)
if(!begin_month)
- current_year = text2num(time2text(world.timeofday, "YYYY"))
+ current_year = text2num(time2text(world.timeofday, "YYYY", world.timezone))
var/list/easterResults = EasterDate(current_year+year_offset)
begin_day = easterResults["day"]
diff --git a/code/modules/logging/log_holder.dm b/code/modules/logging/log_holder.dm
index 2fb94500ce9..8f136d2206e 100644
--- a/code/modules/logging/log_holder.dm
+++ b/code/modules/logging/log_holder.dm
@@ -276,7 +276,7 @@ ADMIN_VERB(log_viewer_new, R_ADMIN|R_DEBUG, "View Round Logs", "View the rounds
init_category_file(category_instance, category_header)
/datum/log_holder/proc/human_readable_timestamp(precision = 3)
- var/start = time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")
+ var/start = time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss", TIMEZONE_UTC)
// now we grab the millis from the rustg timestamp
var/rustg_stamp = rustg_unix_timestamp()
var/list/timestamp = splittext(rustg_stamp, ".")
diff --git a/code/modules/lost_crew/damages/_damages.dm b/code/modules/lost_crew/damages/_damages.dm
index 6fdc2a8eee9..ab54334af70 100644
--- a/code/modules/lost_crew/damages/_damages.dm
+++ b/code/modules/lost_crew/damages/_damages.dm
@@ -118,8 +118,8 @@
body.timeofdeath = world.time - died_how_long_ago
var/death_real_time = world.realtime - died_how_long_ago
- var/current_date = time2text(death_real_time, "DD Month")
- var/current_year = text2num(time2text(death_real_time, "YYYY")) + STATION_YEAR_OFFSET
+ var/current_date = time2text(death_real_time, "DD Month", 0)
+ var/current_year = text2num(time2text(death_real_time, "YYYY", NO_TIMEZONE)) + STATION_YEAR_OFFSET
body.station_timestamp_timeofdeath = "[current_date] [current_year]"
/// Main corpse damage type that's used to apply damages to a body
diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm
index a645f3583e4..65eb42ff19e 100644
--- a/code/modules/mob/living/silicon/robot/robot_defense.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defense.dm
@@ -445,7 +445,7 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real
set_connected_ai(null)
message_admins("[ADMIN_LOOKUPFLW(user)] emagged cyborg [ADMIN_LOOKUPFLW(src)]. Laws overridden.")
log_silicon("EMAG: [key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.")
- var/time = time2text(world.realtime,"hh:mm:ss")
+ var/time = time2text(world.realtime,"hh:mm:ss", TIMEZONE_UTC)
if(user)
GLOB.lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])")
else
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index fcad39f80ff..06243edd0f5 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -621,7 +621,7 @@
data["PC_programheaders"] = program_headers
data["PC_stationtime"] = station_time_timestamp()
- data["PC_stationdate"] = "[time2text(world.realtime, "DDD, Month DD")], [CURRENT_STATION_YEAR]"
+ data["PC_stationdate"] = "[time2text(world.realtime, "DDD, Month DD", NO_TIMEZONE)], [CURRENT_STATION_YEAR]"
data["PC_showexitprogram"] = !!active_program // Hides "Exit Program" button on mainscreen
return data
diff --git a/code/modules/modular_computers/file_system/programs/signalcommander.dm b/code/modules/modular_computers/file_system/programs/signalcommander.dm
index 1e6e3e54051..6a96a68d7fd 100644
--- a/code/modules/modular_computers/file_system/programs/signalcommander.dm
+++ b/code/modules/modular_computers/file_system/programs/signalcommander.dm
@@ -79,7 +79,7 @@
if(user)
computer.balloon_alert(user, "signaled")
- var/time = time2text(world.realtime,"hh:mm:ss")
+ var/time = time2text(world.realtime,"hh:mm:ss", TIMEZONE_UTC)
var/turf/T = get_turf(computer)
var/user_deets
if(signaling)
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index ef05d31ba22..2b827707c5c 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -223,9 +223,9 @@
if(is_signature)
field_text = signature_name
else if(is_date)
- field_text = "[time2text(world.timeofday, "DD/MM")]/[CURRENT_STATION_YEAR]"
+ field_text = "[time2text(world.timeofday, "DD/MM", NO_TIMEZONE)]/[CURRENT_STATION_YEAR]"
else if(is_time)
- field_text = time2text(world.timeofday, "hh:mm")
+ field_text = time2text(world.timeofday, "hh:mm", NO_TIMEZONE)
var/field_font = is_signature ? SIGNATURE_FONT : font
diff --git a/code/modules/transport/tram/tram_controller.dm b/code/modules/transport/tram/tram_controller.dm
index a84495a7cbe..e8a27c44c2a 100644
--- a/code/modules/transport/tram/tram_controller.dm
+++ b/code/modules/transport/tram/tram_controller.dm
@@ -89,7 +89,7 @@
else
serial_number = "LT306TG[rand(000000, 999999)]"
- mfg_date = "[CURRENT_STATION_YEAR]-[time2text(world.timeofday, "MM-DD")]"
+ mfg_date = "[CURRENT_STATION_YEAR]-[time2text(world.timeofday, "MM-DD", NO_TIMEZONE)]"
install_location = specific_transport_id
/datum/tram_mfg_info/proc/load_from_json(list/json_data)
diff --git a/code/modules/wiremod/components/action/radio.dm b/code/modules/wiremod/components/action/radio.dm
index 3940059453e..bda4624c069 100644
--- a/code/modules/wiremod/components/action/radio.dm
+++ b/code/modules/wiremod/components/action/radio.dm
@@ -86,7 +86,7 @@
if(COMPONENT_TRIGGERED_BY(trigger_input, port))
var/signal_code = round(code.value) || 0
var/turf/location = get_turf(src)
- var/time = time2text(world.realtime,"hh:mm:ss")
+ var/time = time2text(world.realtime,"hh:mm:ss", TIMEZONE_UTC)
var/list/loggable_strings = list("[time] : The [QDELETED(parent_shell) ? "null circuit shell(?)" : parent_shell] @ location ([location.x],[location.y],[location.z]) transmitted the following signal : [format_frequency(current_freq)]/[signal_code] via the radio circuit component.")
if(!isnull(owner_ckey))