我需要将扩展值转换为时间格式。例如:
3.50 represents 00:03:50
62.02 represents 01:02:02
73.70 represents 01:14:10
我已经尝试了以下功能来转换小时和分钟部分,但我不知道如何转换秒的部分。
function ConvertToTime(AValue: Extended): TDateTime;
begin
Result:= EncodeTime(trunc(ArticleRec.Quantity) div 60,trunc(ArticleRec.Quantity) mod 60,0,0);
end;
感谢你期待你的帮助。
答案 0 :(得分:2)
小数部分是这样获得的:
var
SecondsFrac: Double;
....
SecondsFrac := Frac(Value);
然后你可以将0到1范围内的浮点小数值转换为0到100范围内的整数,如下所示:
var
Seconds: Integer;
....
Seconds := Round(SecondsFrac*100);
这是一种非常奇怪的存储方式。您必须处理以下事实:Seconds >= 60
时需要增加分钟数,并将Seconds
减少60
。
我想我会把时间转换为秒,然后从那里开始:
function ConvertWeirdTimeFormatToSeconds(const Value: Double): Integer;
var
SecondsFrac: Double;
begin
SecondsFrac := Frac(Value);
Result := Round(SecondsFrac*100) + Trunc(Value)*60;
end;
然后您可以将秒数解码为不同的部分,如下所示:
procedure DecodeSeconds(Value: Integer; out Hours, Minutes, Seconds: Integer);
begin
Seconds := Value mod 60;
Value := Value div 60;
Minutes := Value mod 60;
Value := Value div 60;
Hours := Value;
end;
这让我觉得将时间存储在午夜的整数秒内可能会更好。在我看来,使用标准格式更有意义。
我认为没有理由在这里使用Extended
,或者确实在任何地方使用public class SSOInit extends HandlerInterceptorAdapter {
private static final Logger logger = Logger.getLogger(SSOInit.class.getName());
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.info("### SSO : doInit, read page");
logger.info("### SSO : request url = " + request.getRequestURL());
logger.info("### SSO : request method = " + request.getMethod());
CredentialVO credential = SSOService.getUserCredential();
if (credential != null) {
logger.info("### SSO : credential found, do check point");
String status = SSOService.checkSSOSessionKey();
if (status == null || status.equals("T")) {
logger.info("### SSO : Check point didn't passed, redirect");
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null) {
new SecurityContextLogoutHandler().logout(request, response, auth);
}
SecurityContextHolder.getContext().setAuthentication(null);
} else {
logger.info("### SSO : Check point passed");
if (request.getServletPath().equals(SSOConstant.getREDIRECT_URL())) {
logger.info("### SSO : Check point passed, user trying access login form but already authenticated, redirect");
response.sendRedirect(request.getContextPath() + SSOConstant.getMAIN_URL());
return false;
}
}
}
return super.preHandle(request, response, handler);
}
}
。这是一种非标准类型,由于其奇怪的尺寸和随之而来的对齐问题往往表现不佳。并且它仅在x86上受支持。