1. 程式人生 > >ASP.NET MVC4下使用MongoDB實現時間戳和ObjectId相互轉換

ASP.NET MVC4下使用MongoDB實現時間戳和ObjectId相互轉換

Model層的類:

 public class ObjectIdModel
    {
        public string CreationDateTimeText { get; set; }
        public string ObjectIdText { get; set; }

        public bool Valid { get; set; }

        public int? Machine { get; set; }

        public short? Pid { get; set; }

        public int? Increment { get; set; }

        public int? Timestamp { get; set; }
    }
public class EncodeIndexModel  //控制器Encode檢視Index   名
    {
        public string Timestamps { get; set; }
        public List<string> ObjectIds { get; set; }
        public string ObjectIdsText { get; set; }

        public EncodeIndexModel()
        {
            ObjectIds = new List<string>();
        }
    }
 public class HomeIndexModel
    {
        public HomeIndexModel()
        {
            ObjectIds = new List<ObjectIdModel>();
        }

        public List<ObjectIdModel> ObjectIds { get; set; }

        public string ObjectIdText { get; set; }
    }
控制器層:
 public class EncodeController : Controller
    {
        //http://localhost:20782/Encode?timeStamps=2016-07-20T07:34:47,2016-07-20T07:34:47
        public ActionResult Index(string timestamps)
        {
            var encodeIndexModel = new EncodeIndexModel();

            if (string.IsNullOrWhiteSpace(timestamps))
            {
                return View(encodeIndexModel);
            }
            var timestampList = timestamps
                .Split(',')
                .Where(s => !String.IsNullOrWhiteSpace(s));

            encodeIndexModel.Timestamps = string.Join("\n", timestampList.ToArray());

            var lines = new List<string>();
            foreach (var timestampText in timestampList)
            {
                lines.Add(TimeStampToObjectId(timestampText));
            }

            encodeIndexModel.ObjectIds = lines;
            encodeIndexModel.ObjectIdsText = String.Join(Environment.NewLine, lines);

            return View(encodeIndexModel);
        }

        //時間戳轉換成ObjectId
        private string TimeStampToObjectId(string timestampText)
        {
            DateTime dateTime;
            if (DateTime.TryParse(timestampText, out dateTime))
            {
                return new ObjectId(dateTime, 0, 0, 0).ToString();
            }

            return "無效的日期時間: " + timestampText;
        }
    }
 public class HomeController : Controller
    {
        public ActionResult Index(string objectIds)
        {
            var homeIndexModel = new HomeIndexModel();

            if (string.IsNullOrWhiteSpace(objectIds))
            {
                return View(homeIndexModel);
            }

            var objectIdsList = objectIds
                .Split(',')
                .Where(s => !String.IsNullOrWhiteSpace(s));

            homeIndexModel.ObjectIdText = string.Join("\n", objectIdsList);

            var lines = new List<ObjectIdModel>();
            foreach (var objectIdText in objectIdsList)
            {
                lines.Add(ObjectIdToFormattedText(objectIdText));
            }

            homeIndexModel.ObjectIds = lines;
            return View(homeIndexModel);
        }

        //ObjectId轉成格式化文字
        private ObjectIdModel ObjectIdToFormattedText(string objectIdText)
        {
            var objectIdModel = new ObjectIdModel
            {
                ObjectIdText = objectIdText
            };

            try
            {
                var objectId = new ObjectId(objectIdText);
                objectIdModel.CreationDateTimeText = objectId
                    .CreationTime
                    .ToString("o");

                objectIdModel.Machine = objectId.Machine;
                objectIdModel.Pid = objectId.Pid;
                objectIdModel.Increment = objectId.Increment;
                objectIdModel.Timestamp = objectId.Timestamp;

                objectIdModel.Valid = true;
            }
            catch (Exception)
            {
                objectIdModel.Valid = false;
            }

            return objectIdModel;
        }
    }
View層:

Encode->Index.cshtml內容:

@model MongoDbHelper.Models.EncodeIndexModel
@{
    ViewBag.Title = "MongoDB助手";
}
<div class="container-fluid">
    <div class="row-fluid">
        <div class="span10">
            <p>ISO時間戳轉換成ObjectID</p>
            <textarea style="width: 500px" rows="10" id="objectIds" placeholder="yyyy-mm-ddThh:mm:ss">@Model.Timestamps</textarea>
        </div>
    </div>
    <div class="row-fluid">
        <div class="span6">
            <p><input id="parse" class="btn btn-primary" type="button" value="Encode" /></p>
        </div>
    </div>
    <div class="row-fluid">
        <div class="span6">
            @if (Model.ObjectIds.Any())
            {
                <textarea style="width: 500px" rows="10" id="" style="font-family: 'Courier New'">@Model.ObjectIdsText</textarea>
            }
        </div>
    </div>
</div>
@section scripts
{
    <script type="text/javascript">
        var baseUrl = "@Url.Action("Index")";

        $(document).ready(function() {
            $('#parse').click(parseClick);
        });

        function parseClick() {
            var objectIdsText = $('#objectIds').val();

            var lines = objectIdsText.split('\n');

            var newUrl = baseUrl + "?timeStamps=" + lines.join();

            window.location = newUrl;
        }
    </script>
}
Home->Index.cshtml內容如下
@model MongoDbHelper.Models.HomeIndexModel
@{
    ViewBag.Title = "MongoDB助手";
}
<div class="container-flui">
    <div class="row-fluid">
        <table class="table table-hover table-striped table-condensed">
            <thead>
                <tr>
                    <th>
                        ObjectId
                    </th>
                    <th>
                        Creation timestamp
                    </th>
                    <th>
                        UNIX時間戳(Timestamp)
                    </th>
                    <th>
                        主機名的雜湊值(Machine)
                    </th>
                    <th>
                        程序識別符號(Pid)
                    </th>
                    <th>
                        隨機計數值(Increment)
                    </th>
                </tr>
            </thead>
            <tbody>
                @foreach (var line in Model.ObjectIds)
                {
                    var classText = line.Valid ? "" : "error";
                    <tr class="@classText">
                        <td>
                            @line.ObjectIdText
                        </td>
                        <td>
                            @line.CreationDateTimeText
                        </td>
                        <td>
                            @line.Timestamp
                        </td>
                        <td>
                            @line.Machine
                        </td>
                        <td>
                            @line.Pid
                        </td>
                        <td>
                            @line.Increment
                        </td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
    <div class="row-fluid">
        <p>這裡貼上ObjectID的列表,每行一個:</p>
        <ul class="unstyled">
            <li>
                <textarea cols="26" rows="10" id="objectIds">@Model.ObjectIdText</textarea>
            </li>
            <li>
                <input id="parse" class="btn btn-primary" type="button" value="Parse" />        
            </li>
        </ul>
    </div>
</div>

@section scripts
{
    <script type="text/javascript">
        var baseUrl = "@Url.Action("Index")";

        $(document).ready(function() {
            $('#parse').click(parseClick);
        });

        function parseClick() {
            var objectIdsText = $('#objectIds').val();

            var lines = objectIdsText.split('\n');

            var newUrl = baseUrl + "?objectIds=" + lines.join();

            window.location = newUrl;
        }
    </script>
}
結果如圖: