在vb.net中将字符串转换为日期时间的标准格式

时间:2016-08-12 10:38:15

标签: vb.net

字符串值=" 15:10" 我必须转换字符串值" 15:10"喜欢这个" 1899-12-30 15:10:00.000" 我写下面的代码是否有任何标准的日期/时间格式。

class Node:
    def __init__(self, value: int, left_tree, right_tree):
        self.value = value
        self.left_tree = left_tree
        self.right_tree = right_tree
        self.number = None # Set through traversal

    def is_leaf(self) -> bool:
        return not self.has_left_subtree() and not self.has_right_subtree()

    def has_left_subtree(self) -> bool:
        return self.left_tree is not None

    def has_right_subtree(self) -> bool:
        return self.right_tree is not None

    def to_bytes(self) -> [int]:
        """
        Node numbering is calculated through post-order traversal of tree

        left_subtree:        IF left subtree is leaf THEN 0 ELSE 1
        left_subtree-value:  IF left subtree is leaf THEN left child value ELSE left child number
        right_subtree:       IF right subtree is leaf THEN 0 ELSE 1
        right_subtree-value: IF right subtree is leaf THEN right child value ELSE right child number
        """

        # Base case.
        if self.is_leaf():
            return []

        # Recursive case.
        else:
            assert self.number is not None

            left_byte_repr = self.left_tree.to_bytes() if self.has_left_subtree() else []
            right_byte_repr = self.right_tree.to_bytes() if self.has_right_subtree() else []

            self_byte_repr = [0 if self.left_tree.is_leaf() else 1,
                         self.left_tree.value if self.left_tree.is_leaf() else self.left_tree.number,
                         0 if self.right_tree.is_leaf() else 1,
                         self.right_tree.value if self.right_tree.is_leaf() else self.right_tree.number]

            # Post-order construction.
            return left_byte_repr + right_byte_repr + self_byte_repr

    def __repr__(self):
        return "Node {}: value={}, left tree=[{}], right tree=[{}]".format(self.number, self.value, self.left_tree, self.right_tree)


def post_order_enumerate_tree(tree : Node,  enumerate_leaves: bool=False) -> Node:
    enumerated_tree, _ = post_order_enumerate_tree_helper(tree, 0, enumerate_leaves)
    return enumerated_tree


def post_order_enumerate_tree_helper(tree: Node, curr_node_number: int, enumerate_leaves: bool) -> (Node, int):
    # Base case.
    if tree.is_leaf():
        if enumerate_leaves:
            tree.number = curr_node_number
            return tree, curr_node_number + 1
        else:
            return tree, curr_node_number

    # Recursive case.
    else:
        # Traverse left subtree, if it exists.
        if tree.has_left_subtree():
            enumerated_left_tree, new_node_number = post_order_enumerate_tree_helper(tree.left_tree, curr_node_number, enumerate_leaves)
            tree.left_tree = enumerated_left_tree
            curr_node_number = new_node_number

        # Traverse right subtree, if it exists.
        if tree.has_right_subtree():
            enumerated_right_tree, new_node_number = post_order_enumerate_tree_helper(tree.right_tree, curr_node_number, enumerate_leaves)
            tree.right_tree = enumerated_right_tree
            curr_node_number = new_node_number

        # Operate on this node itself.
        tree.number = curr_node_number
        return tree, curr_node_number + 1


def build_tree() -> Node:
    leaf_3 = Node(3, None, None)
    leaf_2 = Node(2, None, None)
    leaf_5 = Node(5, None, None)

    tree_a = Node(None, leaf_3, leaf_2)
    root = Node(None, tree_a, leaf_5)
    return root


def main():
    tree = build_tree()
    enumerated_tree = post_order_enumerate_tree(tree, enumerate_leaves=False)

    print(enumerated_tree.to_bytes())


if __name__ == "__main__":
    main()

2 个答案:

答案 0 :(得分:3)

拥有DateTime对象后,只需控制它在调用.ToString()方法时的输出方式。

ToString重载带有格式字符串。如果您希望输出为:

  

1899-12-30 15:10:00.000

然后你需要提供的字符串是:

"yyyy-MM-dd HH:mm:ss.fff"

此外,当您解析日期时,您可以在解析格式字符串中包含冒号(" yyyyMMddHH:mm"),因此您不会需要该行

dtnew = dtnew.Replace(":", string.Empty)

答案 1 :(得分:0)

如果您知道传递的字符串始终是格式" HH:mm",您只需将这些元素替换为您将返回的DateTime。

Private Function GetCurrentTime(ByVal dtnew As String) As DateTime
    'We get the date
    Dim oaDate As DateTime = DateTime.FromOADate(0)
    'We change the Hour
    oaDate.Hour = dtNew.Substring(0, 2)
    'We change the minutes
    oaDate.Minute = dtNew.Substring(3, 2)
    return oaDate
End Function

此日期的输出格式无关紧要,因为您修改了DateTime结构的字段。