P4ServerTimzoneImmutability.html #2

  • //
  • guest/
  • tom_tyler/
  • docs/
  • P4ServerTimzoneImmutability.html
  • View
  • Commits
  • Open Download .zip Download (59 KB)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.23">
<meta name="author" content="Perforce Professional Services">
<title>Treat the P4 Server Timezone as Immutable After Initial Installation</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment the following line when using as a custom stylesheet */
/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */
html{font-family:sans-serif;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
b,strong{font-weight:bold}
abbr{font-size:.9em}
abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
dfn{font-style:italic}
hr{height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type=checkbox],input[type=radio]{padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,::before,::after{box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ul.square{list-style-type:square}
ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre).nobreak{word-wrap:normal}
:not(pre).nowrap{white-space:nowrap}
:not(pre).pre-wrap{white-space:pre-wrap}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child{border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details{margin-left:1.25rem}
details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
details>summary::-webkit-details-marker{display:none}
details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
pre.pygments span.linenos{display:inline-block;margin-right:.75em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>*>tr>*{border-width:1px}
table.grid-cols>*>tr>*{border-width:0 1px}
table.grid-rows>*>tr>*{border-width:1px 0}
table.frame-all{border-width:1px}
table.frame-ends{border-width:1px 0}
table.frame-sides{border-width:0 1px}
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
li>p:empty:only-child::before{content:"";display:inline-block}
ul.checklist>li>p:first-child{margin-left:-1em}
ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
td.hdlist2{word-wrap:anywhere}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active,#footnotes .footnote a:first-of-type:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]{border-bottom:1px dotted}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#header,#content,#footnotes,#footer{max-width:none}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.3/styles/github.min.css">
</head>
<body class="article toc2 toc-left">
<div id="header">
<h1>Treat the P4 Server Timezone as Immutable After Initial Installation</h1>
<div class="details">
<span id="author" class="author">Perforce Professional Services</span><br>
<span id="revdate">2026-08-14</span>
</div>
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel1">
<li><a href="#_executive_summary">1. Executive Summary</a></li>
<li><a href="#_scope">2. Scope</a></li>
<li><a href="#_the_timezone_is_part_of_the_servers_persistent_operational_context">3. The Timezone Is Part of the Server&#8217;s Persistent Operational Context</a></li>
<li><a href="#_primary_risk_rcs_keyword_expansion_and_k_file_integrity_checks">4. Primary Risk: RCS Keyword Expansion and <code>+k</code> File Integrity Checks</a>
<ul class="sectlevel2">
<li><a href="#_why_this_is_the_highest_impact_consequence">4.1. Why this is the highest-impact consequence</a></li>
<li><a href="#_why_verification_reports_bad">4.2. Why verification reports <code>BAD!</code></a></li>
<li><a href="#_why_the_impact_scales_badly">4.3. Why the impact scales badly</a></li>
<li><a href="#_digest_recalculation_is_remediation_not_prevention">4.4. Digest recalculation is remediation, not prevention</a></li>
</ul>
</li>
<li><a href="#_permanent_change_to_historical_time_interpretation">5. Permanent Change to Historical Time Interpretation</a>
<ul class="sectlevel2">
<li><a href="#_existing_history_is_displayed_in_the_new_timezone">5.1. Existing history is displayed in the new timezone</a></li>
<li><a href="#_date_based_revision_specifications_change_meaning">5.2. Date-based revision specifications change meaning</a></li>
</ul>
</li>
<li><a href="#_distributed_and_replicated_topologies">6. Distributed and Replicated Topologies</a></li>
<li><a href="#_secondary_operational_consequences">7. Secondary Operational Consequences</a></li>
<li><a href="#_timezone_stability_versus_clock_synchronization">8. Timezone Stability Versus Clock Synchronization</a></li>
<li><a href="#_required_operational_policy">9. Required Operational Policy</a></li>
<li><a href="#_if_a_timezone_change_is_unavoidable">10. If a Timezone Change Is Unavoidable</a></li>
<li><a href="#_customer_facing_explanation_for_an_observed_k_incident">11. Customer-Facing Explanation for an Observed <code>+k</code> Incident</a></li>
<li><a href="#_conclusions">12. Conclusions</a></li>
<li><a href="#_references">13. References</a></li>
</ul>
</div>
</div>
<div id="content">
<div class="sect1">
<h2 id="_executive_summary">1. Executive Summary</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The operating-system timezone of a P4 Server must be selected during initial installation and treated as immutable for the operational lifetime of that server instance.</p>
</div>
<div class="paragraph">
<p>Changing the timezone does not alter the stored sequence of changelists or the underlying instant represented by an epoch timestamp. It does, however, change the timezone context in which the server processes time. The change has permanent repository-visible consequences:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>For files that use RCS keyword expansion, such as <code>text+k</code> or the historical <code>ktext</code> alias, changing the timezone changes date-bearing keyword expansion. This changes the byte stream used for checksum validation and causes stored digests to disagree with newly calculated digests. At scale, the result can be widespread verification failures, merge failures, and messages warning that archive content might have been tampered with.</p>
</li>
<li>
<p>Changing the timezone changes the local-time representation of existing history and changes the meaning of date-based revision specifications. The same date/time expression can identify a different point in repository history after the change.</p>
</li>
<li>
<p>Changing the timezone complicates comparison with previously recorded audit evidence, reports, procedures, and external systems that retain the original local-time convention.</p>
</li>
<li>
<p>Changing the timezone complicates log correlation, particularly when topology members or related systems do not change at precisely the same operational boundary.</p>
</li>
</ol>
</div>
<div class="paragraph">
<p>These effects are not hypothetical risks. They follow directly from changing the timezone context used by an established P4 Server. The severity depends heavily on repository content and operational practices. In particular, an installation containing a large population of <code>+k</code> revisions can experience severe and prolonged disruption.</p>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
<div class="paragraph">
<p>Do not change the timezone of a P4 Server after initial installation.</p>
</div>
<div class="paragraph">
<p>Treat the server timezone as an immutable part of the server&#8217;s persistent operational identity. If an exceptional business or technical requirement makes a change unavoidable, handle it as a high-risk P4 data migration, not as routine operating-system maintenance.</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_scope">2. Scope</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This guidance applies to the timezone configured on the operating system that hosts a P4 Server, including a commit server, edge server, replica, or standalone server.</p>
</div>
<div class="paragraph">
<p>This guidance concerns changing the timezone, such as changing a host from Pacific Time to UTC. It is distinct from maintaining clock accuracy within the established timezone. Accurate clock synchronization remains necessary, particularly in a distributed topology. Clock synchronization corrects clock drift; it must not be implemented by redefining the server&#8217;s established timezone.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_the_timezone_is_part_of_the_servers_persistent_operational_context">3. The Timezone Is Part of the Server&#8217;s Persistent Operational Context</h2>
<div class="sectionbody">
<div class="paragraph">
<p>P4 Server records time values as seconds since the Unix epoch. Changing the operating-system timezone therefore does not rewrite each stored timestamp and does not move the underlying event to a different instant.</p>
</div>
<div class="paragraph">
<p>The timezone is nevertheless operationally significant. P4 Server uses its timezone when converting stored time values to human-readable local dates and times and when interpreting local date/time input. Changing the timezone changes the frame of reference applied to existing history and future date-based requests.</p>
</div>
<div class="paragraph">
<p>The distinction is precise:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>The instant represented by a stored epoch value remains unchanged.</p>
</li>
<li>
<p>The displayed local date and time changes.</p>
</li>
<li>
<p>A date/time supplied without an explicit timezone is interpreted in the server&#8217;s current timezone.</p>
</li>
<li>
<p>A date-based revision specification therefore identifies a different historical boundary when the timezone changes.</p>
</li>
<li>
<p>Date-bearing RCS keywords expand using the changed timezone context, which changes checksum input for affected <code>+k</code> revisions.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The repository chronology is not reordered, but the established local-time meaning of that chronology is permanently changed.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_primary_risk_rcs_keyword_expansion_and_k_file_integrity_checks">4. Primary Risk: RCS Keyword Expansion and <code>+k</code> File Integrity Checks</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_why_this_is_the_highest_impact_consequence">4.1. Why this is the highest-impact consequence</h3>
<div class="paragraph">
<p>Files with the <code>+k</code> modifier use RCS keyword expansion. Examples include the modern <code>text+k</code> type and the historical <code>ktext</code> alias. Supported keyword markers embedded in file content are expanded to revision-specific values when P4 materializes or processes the file.</p>
</div>
<div class="paragraph">
<p>Some expanded keywords contain a date or date/time. Changing the server timezone changes those expanded values. Because a checksum is calculated from bytes rather than from the abstract meaning of the content, a changed date/time expansion changes the checksum input.</p>
</div>
<div class="paragraph">
<p>Conceptually, the difference can look like this:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">Before timezone change:
$DateTime: 2026/08/14 10:30:00 $

After timezone change:
$DateTime: 2026/08/14 17:30:00 $</code></pre>
</div>
</div>
<div class="paragraph">
<p>The exact keyword value and format depend on the keyword and revision metadata. The deterministic consequence is that a changed date-bearing expansion produces a different byte sequence.</p>
</div>
</div>
<div class="sect2">
<h3 id="_why_verification_reports_bad">4.2. Why verification reports <code>BAD!</code></h3>
<div class="paragraph">
<p><code>p4 verify</code> validates archived revisions against stored digest information. For a revision using RCS keyword expansion, checksum processing accounts for the keyword-expanded form according to the filetype semantics.</p>
</div>
<div class="paragraph">
<p>After the server timezone changes, a date-bearing keyword expands differently from the way it expanded when the original digest was established. The recomputed checksum differs from the stored checksum, and <code>p4 verify</code> reports the affected revision as <code>BAD!</code>.</p>
</div>
<div class="paragraph">
<p>In this specific and established scenario, the mismatch is caused by the timezone change. The message does not, by itself, demonstrate that archive bytes were maliciously or accidentally modified. Nevertheless, the message is operationally serious because the same integrity checks protect against actual archive damage. Administrators and users cannot simply disregard it.</p>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<div class="title">Warning</div>
</td>
<td class="content">
<div class="paragraph">
<p>A timezone-induced checksum mismatch is not merely a cosmetic verification warning. Operations that depend on successful content validation, including merge-related processing, can fail with messages indicating that files might have been tampered with.</p>
</div>
<div class="paragraph">
<p>In a repository containing hundreds of thousands of <code>+k</code> revisions, identifying and validating the affected population can require an extensive verification effort. Normal workflows can remain impaired until the affected revisions are correctly identified, their archive integrity is established, and digest metadata is remediated under a controlled plan.</p>
</div>
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="_why_the_impact_scales_badly">4.3. Why the impact scales badly</h3>
<div class="paragraph">
<p>The operational cost is proportional not only to the number of depot files, but to the number of affected file revisions. A repository can contain a very large historical population of <code>+k</code> revisions even if relatively few such files remain active today.</p>
</div>
<div class="paragraph">
<p>The consequences can include:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Large numbers of alarming <code>BAD!</code> verification results.</p>
</li>
<li>
<p>Merge and related workflow failures caused by content-integrity checks.</p>
</li>
<li>
<p>Extended verification runs needed to identify the affected revision population.</p>
</li>
<li>
<p>Difficulty distinguishing expected timezone-induced mismatches from genuine archive corruption.</p>
</li>
<li>
<p>Pressure to replace stored digests before the underlying cause and archive integrity have been established.</p>
</li>
<li>
<p>Prolonged operational disruption while administrators investigate messages that reasonably appear to indicate tampering.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The ambiguity between an expected timezone effect and actual tampering is itself harmful. The integrity warning must remain meaningful, so the affected revisions require disciplined investigation and remediation rather than blanket suppression.</p>
</div>
</div>
<div class="sect2">
<h3 id="_digest_recalculation_is_remediation_not_prevention">4.4. Digest recalculation is remediation, not prevention</h3>
<div class="paragraph">
<p>Recalculating a digest can align stored verification metadata with content processed under the new timezone. It does not undo the timezone change, restore the former expansion, restore the former meaning of local date/time queries, or make the migration transparent.</p>
</div>
<div class="paragraph">
<p>Before replacing stored digests, an administrator must establish that:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>The mismatch belongs to the understood timezone-sensitive <code>+k</code> population.</p>
</li>
<li>
<p>The archive content is the intended revision content and has not been damaged or altered.</p>
</li>
<li>
<p>Current checkpoints, journals, archive backups, and recovery materials are available.</p>
</li>
<li>
<p>The new timezone is accepted as the permanent timezone for the server and its topology.</p>
</li>
<li>
<p>All affected workflows and integrations have been evaluated.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>A digest must not be recalculated merely to eliminate an unexplained verification error.</p>
</div>
<div class="paragraph">
<p>Perforce documents the relationship among timezone changes, <code>ktext</code> or <code>text+k</code> files, <code>p4 verify</code>, and digest recalculation in <a href="https://portal.perforce.com/s/article/2476">Moving a P4 Server to a different timezone</a>.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_permanent_change_to_historical_time_interpretation">5. Permanent Change to Historical Time Interpretation</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_existing_history_is_displayed_in_the_new_timezone">5.1. Existing history is displayed in the new timezone</h3>
<div class="paragraph">
<p>Suppose a changelist was submitted while a server operated in Pacific Time. After changing the server to UTC, the underlying epoch timestamp still identifies the same instant, but the event is displayed using UTC. The reported wall-clock time changes and, near a day boundary, the reported calendar date changes.</p>
</div>
<div class="paragraph">
<p>It is inaccurate to say that the stored history is numerically shifted or corrupted. The precise statement is:</p>
</div>
<div class="quoteblock">
<blockquote>
<div class="paragraph">
<p>Changing the P4 Server timezone permanently changes the local-time representation and interpretation of existing history. Stored events remain at the same instants, but they are reported using the new timezone, and local date/time expressions no longer identify the same historical boundaries that they identified before the change.</p>
</div>
</blockquote>
</div>
<div class="paragraph">
<p>The apparent difference is not necessarily a single fixed number of hours throughout the year. If the old timezone observes daylight-saving time, its UTC offset differs by date. Changing from such a regional timezone to UTC therefore changes historical wall-clock times by one offset for part of the year and another offset for the remainder.</p>
</div>
<div class="paragraph">
<p>This loss of continuity affects the authenticity and interpretation of historical local-time records. Previously captured reports, audit evidence, screenshots, support records, and procedural references can show different local timestamps from current output for the same repository events.</p>
</div>
</div>
<div class="sect2">
<h3 id="_date_based_revision_specifications_change_meaning">5.2. Date-based revision specifications change meaning</h3>
<div class="paragraph">
<p>P4 revision specifications can use a date and time to identify repository state. For example:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-console hljs" data-lang="console">p4 sync //depot/project/...@2026/08/14:10:30:00</code></pre>
</div>
</div>
<div class="paragraph">
<p>P4 Server interprets that date/time in the server&#8217;s timezone. Changing the server timezone changes the instant denoted by the expression. The unchanged command can therefore select a different revision or set of revisions after the timezone change.</p>
</div>
<div class="paragraph">
<p>This behavior affects every workflow that relies on a server-interpreted local date/time as a historical boundary. When a procedure must identify an invariant repository state, use a stable identifier such as a numbered changelist rather than a local date/time expression.</p>
</div>
<div class="paragraph">
<p>The Perforce KB article <a href="https://portal.perforce.com/s/article/2476">Moving a P4 Server to a different timezone</a> demonstrates that an unchanged date-based revision specification can select a different revision after the server timezone changes.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_distributed_and_replicated_topologies">6. Distributed and Replicated Topologies</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Servers participating in the same P4 topology must use a consistent timezone configuration. The P4 Server Administration Guide lists timezone among the characteristics in which a replica must match its target server.</p>
</div>
<div class="paragraph">
<p>A timezone change on an established commit server, edge server, or replica is therefore a topology concern, not an isolated host adjustment. Consistent configuration is necessary for coherent timestamp interpretation, keyword processing, verification analysis, and operational support.</p>
</div>
<div class="paragraph">
<p>The required standard is:</p>
</div>
<div class="quoteblock">
<blockquote>
<div class="paragraph">
<p>Select one timezone during initial deployment, configure it consistently across the complete P4 topology, maintain accurate clock synchronization, and do not change that timezone during the operational lifetime of the environment.</p>
</div>
</blockquote>
</div>
<div class="paragraph">
<p>UTC is often a sensible choice for a new globally distributed deployment because it avoids daylight-saving transitions. That is an installation-time design decision. The benefits of UTC do not justify converting an established server from its existing timezone after repository history and <code>+k</code> digests have been created in that context.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_secondary_operational_consequences">7. Secondary Operational Consequences</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The <code>+k</code> integrity impact and the permanent change to historical time interpretation are the primary reasons to prohibit a timezone change. Additional consequences reinforce the same policy:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Existing reports, audit records, screenshots, procedures, and support evidence retain timestamps expressed in the former timezone, while new server output presents the same events in the new timezone.</p>
</li>
<li>
<p>External systems can continue to interpret or present timestamps according to the former convention.</p>
</li>
<li>
<p>Time-based automation and integrations must be reviewed for changed local-time boundaries.</p>
</li>
<li>
<p>Log correlation becomes more difficult across the transition, particularly if related systems or topology members do not change at the same operational boundary.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>These concerns are generally more manageable than a large <code>+k</code> population, but they add cost, ambiguity, and risk to a change that should not occur in an established environment.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_timezone_stability_versus_clock_synchronization">8. Timezone Stability Versus Clock Synchronization</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Timezone configuration and clock synchronization solve different problems:</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Timezone</dt>
<dd>
<p>Defines how an instant is represented as a local date and time and how local date/time input is interpreted.</p>
</dd>
<dt class="hdlist1">Clock synchronization</dt>
<dd>
<p>Keeps the host clock aligned with an authoritative time source and limits drift.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>Administrators should maintain accurate time through a supported operating-system synchronization service. They must not change the timezone, or manually add or remove hours from the clock, as a substitute for correcting clock synchronization.</p>
</div>
<div class="paragraph">
<p>Enabling, disabling, or reconfiguring a synchronization service does not inherently require a timezone change. If a host clock is significantly inaccurate, correcting it is itself an operational event that must be planned and monitored, but the established timezone should remain unchanged.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_required_operational_policy">9. Required Operational Policy</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The following language is suitable for an operational standard:</p>
</div>
<div class="quoteblock">
<blockquote>
<div class="paragraph">
<p>The operating-system timezone of a P4 Server is an installation-time setting and shall be treated as immutable after the server enters service. The timezone shall not be changed as part of host relocation, data-center migration, cloud migration, operating-system maintenance, or a preference for UTC. All servers in a P4 topology shall use a consistent timezone and maintain accurate clock synchronization.</p>
</div>
<div class="paragraph">
<p>An unavoidable post-installation timezone change shall be classified as a high-risk P4 data migration. It requires explicit P4 administrative review, a documented impact assessment, complete recovery protections, a maintenance and validation plan, an inventory of <code>+k</code> revisions, verification of affected archives, and controlled remediation of digest metadata. Date-based repository operations, historical reporting, replicas, integrations, and external audit dependencies shall also be evaluated.</p>
</div>
</blockquote>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_if_a_timezone_change_is_unavoidable">10. If a Timezone Change Is Unavoidable</h2>
<div class="sectionbody">
<div class="paragraph">
<p>There is no zero-impact procedure for changing the timezone of an established P4 Server. A required change must be handled as a controlled migration whose purpose is to manage known consequences, not as a routine setting change.</p>
</div>
<div class="paragraph">
<p>The exact procedure must be tailored to the topology, P4 Server version, operating system, number of <code>+k</code> revisions, backup design, integrations, and business requirements. At minimum, the migration plan must address the following areas:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Record the old timezone, its historical UTC-offset behavior, and the intended new timezone.</p>
</li>
<li>
<p>Inventory all P4 Server processes and topology members that must remain consistent.</p>
</li>
<li>
<p>Inventory <code>+k</code> revisions and estimate the verification and remediation scope before changing the timezone.</p>
</li>
<li>
<p>Establish and retain a verification baseline.</p>
</li>
<li>
<p>Identify merge workflows and other operations that depend on content-integrity validation.</p>
</li>
<li>
<p>Identify procedures and integrations that use date-based revision specifications.</p>
</li>
<li>
<p>Preserve current checkpoints, journals, archive backups, configuration, and verification evidence in accordance with the site&#8217;s recovery procedures.</p>
</li>
<li>
<p>Define how genuine archive damage will be distinguished from timezone-induced <code>+k</code> mismatches.</p>
</li>
<li>
<p>Apply the timezone change consistently to the affected topology under a controlled maintenance boundary.</p>
</li>
<li>
<p>Validate server time, synchronization status, replication, integrations, historical display, and date-based query behavior.</p>
</li>
<li>
<p>Run targeted verification for known <code>+k</code> content and broader verification as required by the validation plan.</p>
</li>
<li>
<p>Investigate every mismatch before changing stored digest metadata.</p>
</li>
<li>
<p>Recalculate stored digests only after the cause and integrity of the affected revisions have been established.</p>
</li>
<li>
<p>Document the permanent change for administrators, auditors, support personnel, disaster recovery procedures, and future migrations.</p>
</li>
</ol>
</div>
<div class="paragraph">
<p>This list is an impact-assessment framework, not a substitute for a site-specific runbook.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_customer_facing_explanation_for_an_observed_k_incident">11. Customer-Facing Explanation for an Observed <code>+k</code> Incident</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The following statement can be reused in customer communications:</p>
</div>
<div class="quoteblock">
<blockquote>
<div class="paragraph">
<p>The verification and merge failures observed for files using RCS keyword expansion (<code>+k</code> or <code>ktext</code>) are a direct consequence of changing the P4 Server timezone. They do not, by themselves, demonstrate malicious tampering or storage corruption.</p>
</div>
<div class="paragraph">
<p>P4 stores timestamps as epoch values, but the server timezone participates in date-bearing RCS keyword expansion. Changing the timezone changes the expanded byte stream used during checksum validation. The newly calculated checksum therefore differs from the digest established under the original timezone, and integrity-dependent operations can report that the file might have been tampered with or can refuse to continue.</p>
</div>
<div class="paragraph">
<p>The timezone change also permanently changes the local-time representation of existing repository history and changes the meaning of date-based revision specifications. Although the underlying sequence and instant of repository events remain intact, the same local date/time expression can identify a different repository boundary after the change.</p>
</div>
<div class="paragraph">
<p>For these reasons, the P4 Server timezone is an installation-time decision and must be treated as immutable after the server enters service.</p>
</div>
</blockquote>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_conclusions">12. Conclusions</h2>
<div class="sectionbody">
<div class="paragraph">
<p>A P4 Server timezone is not a cosmetic display preference. It is an input to date-bearing RCS keyword expansion and checksum validation, and it defines how the server presents and interprets historical time.</p>
</div>
<div class="paragraph">
<p>For repositories with <code>+k</code> history, changing the timezone can cause widespread integrity-check and merge failures across the complete population of affected revisions. Independently of <code>+k</code> usage, the change permanently alters local-time reporting and the meaning of local date/time queries. Secondary effects include audit discontinuity, integration changes, and log-correlation difficulty.</p>
</div>
<div class="paragraph">
<p>The administrative rule is therefore unequivocal:</p>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<div class="title">Important</div>
</td>
<td class="content">
<div class="paragraph">
<p>Do not change the timezone of a P4 Server after initial installation.</p>
</div>
<div class="paragraph">
<p>Treat the P4 Server timezone as immutable for the lifetime of the server environment.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>For a new installation, choose the timezone deliberately, configure it consistently throughout the P4 topology, and maintain accurate clock synchronization. For an established installation, preserve the existing timezone through host replacements, migrations, upgrades, and changes in physical location.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_references">13. References</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="https://portal.perforce.com/s/article/2476">Perforce KB: Moving a P4 Server to a different timezone</a></p>
</li>
<li>
<p><a href="https://help.perforce.com/helix-core/server-apps/p4sag/2025.2/Content/P4SAG/replication.requirements.html">P4 Server Administration Documentation: Requirements for replication systems</a></p>
</li>
<li>
<p><a href="https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/file.types.synopsis.modifiers.html">P4 CLI Reference: File type modifiers</a></p>
</li>
<li>
<p><a href="https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/filespecs.html">P4 CLI Reference: File specifications</a></p>
</li>
<li>
<p><a href="https://help.perforce.com/helix-core/server-apps/cmdref/current/Content/CmdRef/p4_verify.html">P4 CLI Reference: p4 verify</a></p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2026-08-14 16:11:40 -0400
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.3/highlight.min.js"></script>
<script>
if (!hljs.initHighlighting.called) {
  hljs.initHighlighting.called = true
  ;[].slice.call(document.querySelectorAll('pre.highlight > code[data-lang]')).forEach(function (el) { hljs.highlightBlock(el) })
}
</script>
</body>
</html>
# Change User Description Committed
#2 33195 C. Thomas Tyler Rewrite.
#1 33194 C. Thomas Tyler Added initial doc.