首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将DateTime转换为最短的版本号(用于url)

将DateTime转换为最短的版本号(用于url)
EN

Stack Overflow用户
提问于 2011-09-12 03:30:50
回答 2查看 3.5K关注 0票数 3

挑战:将图像文件的“修改日期”DateTime转换为适合于在url中保持唯一性的版本号/字符串,因此图像的每次修改都会生成一个唯一的url,版本号/字符串尽可能短。

代码的短小性仅次于数字/字符串的短小,如果这并不真正符合代码-高尔夫状态:-)

要求

  • C#,.Net framework v4
  • 输出必须是url中文件夹名的有效字符。
  • DateTime的精度可以降低到最近的分钟。

编辑:这不是完全的理论/难题,所以我想我宁愿把它留在这里,而不是在代码-高尔夫堆栈交换?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-12 03:36:59

使用DateTime.Ticks属性,然后将其转换为36基数。它将非常短,并可用于一个URL。

下面是一个转换到/从Base 36的类:

http://www.codeproject.com/KB/cs/base36.aspx

您也可以使用基数62,但不能使用base64,因为除了数字和字母之外,基数64中的一个额外数字是+,它需要进行url编码,并且您说您希望避免这样做。

票数 3
EN

Stack Overflow用户

发布于 2011-09-13 04:07:01

好的,把答案和评论结合起来,我想出了以下几点。

注意:删除零填充字节,并从项目开始时的启动日期差异,以减少数字的大小。

代码语言:javascript
运行
复制
    public static string GetVersion(DateTime dateTime)
    {
        System.TimeSpan timeDifference = dateTime - new DateTime(2010, 1, 1, 0, 0, 0, DateTimeKind.Utc);
        long min = System.Convert.ToInt64(timeDifference.TotalMinutes);
        return EncodeTo64Url(min);
    }

    public static string EncodeTo64Url(long toEncode)
    {
        string returnValue = EncodeTo64(toEncode);

        // returnValue is base64 = may contain a-z, A-Z, 0-9, +, /, and =.
        // the = at the end is just a filler, can remove
        // then convert the + and / to "base64url" equivalent
        //
        returnValue = returnValue.TrimEnd(new char[] { '=' });
        returnValue = returnValue.Replace("+", "-");
        returnValue = returnValue.Replace("/", "_");

        return returnValue;
    }

    public static string EncodeTo64(long toEncode)
    {
        byte[] toEncodeAsBytes = System.BitConverter.GetBytes(toEncode);
        if (BitConverter.IsLittleEndian)
            Array.Reverse(toEncodeAsBytes);
        string returnValue = System.Convert.ToBase64String(toEncodeAsBytes.SkipWhile(b=>b==0).ToArray());
        return returnValue;
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7383021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档