ASP.NET MVC4下使用MongoDB實現時間戳和ObjectId相互轉換
阿新 • • 發佈:2018-12-24
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>
}
結果如圖: